createViewManagers(ReactApplicationContext reactContext) {
- if (config == null) {
- config = new DefaultReactExoplayerConfig(reactContext);
- }
- return Collections.singletonList(new ReactExoplayerViewManager(config));
- }
-}
diff --git a/android-exoplayer/README.md b/android/README.md
similarity index 96%
rename from android-exoplayer/README.md
rename to android/README.md
index 9396763b..07c85afd 100644
--- a/android-exoplayer/README.md
+++ b/android/README.md
@@ -9,7 +9,7 @@ https://github.com/google/ExoPlayer
## Benefits over `react-native-video@0.9.0`:
- Android Video library built by Google, with a lot of support
-- Supports DASH, HlS, & SmoothStreaming adaptive streams
+- Supports DASH, HLS, & SmoothStreaming adaptive streams
- Supports formats such as MP4, M4A, FMP4, WebM, MKV, MP3, Ogg, WAV, MPEG-TS, MPEG-PS, FLV and ADTS (AAC).
- Fewer device specific issues
- Highly customisable
diff --git a/android/build.gradle b/android/build.gradle
index 2fb8dfd2..ebacc8e9 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -5,22 +5,45 @@ def safeExtGet(prop, fallback) {
}
android {
- compileSdkVersion safeExtGet('compileSdkVersion', 28)
- buildToolsVersion safeExtGet('buildToolsVersion', '28.0.3')
+ compileSdkVersion safeExtGet('compileSdkVersion', 31)
+ buildToolsVersion safeExtGet('buildToolsVersion', '30.0.2')
+
+ compileOptions {
+ targetCompatibility JavaVersion.VERSION_1_8
+ sourceCompatibility JavaVersion.VERSION_1_8
+ }
defaultConfig {
- minSdkVersion safeExtGet('minSdkVersion', 16)
+ minSdkVersion safeExtGet('minSdkVersion', 21)
targetSdkVersion safeExtGet('targetSdkVersion', 28)
versionCode 1
versionName "1.0"
- ndk {
- abiFilters "armeabi-v7a", "x86"
- }
+ }
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
}
}
-dependencies {
- //noinspection GradleDynamicVersion
- implementation "com.facebook.react:react-native:${safeExtGet('reactNativeVersion', '+')}"
- implementation 'com.yqritc:android-scalablevideoview:1.0.4'
+repositories {
+ google()
+}
+
+dependencies {
+ implementation "com.facebook.react:react-native:${safeExtGet('reactNativeVersion', '+')}"
+ implementation('com.google.android.exoplayer:exoplayer:2.18.1') {
+ exclude group: 'com.android.support'
+ }
+
+ // All support libs must use the same version
+ implementation "androidx.annotation:annotation:1.1.0"
+ implementation "androidx.core:core:1.1.0"
+ implementation "androidx.media:media:1.1.0"
+ implementation "androidx.activity:activity:1.4.0"
+
+ implementation('com.google.android.exoplayer:extension-okhttp:2.18.1') {
+ exclude group: 'com.squareup.okhttp3', module: 'okhttp'
+ }
+ implementation "com.squareup.okhttp3:okhttp:" + '$OKHTTP_VERSION'
}
diff --git a/android/src/main/java/com/android/vending/expansion/zipfile/APEZProvider.java b/android/src/main/java/com/android/vending/expansion/zipfile/APEZProvider.java
deleted file mode 100644
index 1ba910bf..00000000
--- a/android/src/main/java/com/android/vending/expansion/zipfile/APEZProvider.java
+++ /dev/null
@@ -1,287 +0,0 @@
-package com.android.vending.expansion.zipfile;
-
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-//To implement APEZProvider in your application, you'll want to change
-//the AUTHORITY to match what you define in the manifest.
-
-import com.android.vending.expansion.zipfile.ZipResourceFile.ZipEntryRO;
-
-import android.content.ContentProvider;
-import android.content.ContentProviderOperation;
-import android.content.ContentProviderResult;
-import android.content.ContentValues;
-import android.content.Context;
-import android.content.OperationApplicationException;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.pm.ProviderInfo;
-import android.content.res.AssetFileDescriptor;
-import android.database.Cursor;
-import android.database.MatrixCursor;
-import android.net.Uri;
-import android.os.ParcelFileDescriptor;
-import android.provider.BaseColumns;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.ArrayList;
-
-/**
- * This content provider is an optional part of the library.
- *
- * Most apps don't need to use this class. This defines a
- * ContentProvider that marshalls the data from the ZIP files through a
- * content provider Uri in order to provide file access for certain Android APIs
- * that expect Uri access to media files.
- *
- */
-public abstract class APEZProvider extends ContentProvider {
-
- private ZipResourceFile mAPKExtensionFile;
- private boolean mInit;
-
- public static final String FILEID = BaseColumns._ID;
- public static final String FILENAME = "ZPFN";
- public static final String ZIPFILE = "ZFIL";
- public static final String MODIFICATION = "ZMOD";
- public static final String CRC32 = "ZCRC";
- public static final String COMPRESSEDLEN = "ZCOL";
- public static final String UNCOMPRESSEDLEN = "ZUNL";
- public static final String COMPRESSIONTYPE = "ZTYP";
-
- public static final String[] ALL_FIELDS = {
- FILEID,
- FILENAME,
- ZIPFILE,
- MODIFICATION,
- CRC32,
- COMPRESSEDLEN,
- UNCOMPRESSEDLEN,
- COMPRESSIONTYPE
- };
-
- public static final int FILEID_IDX = 0;
- public static final int FILENAME_IDX = 1;
- public static final int ZIPFILE_IDX = 2;
- public static final int MOD_IDX = 3;
- public static final int CRC_IDX = 4;
- public static final int COMPLEN_IDX = 5;
- public static final int UNCOMPLEN_IDX = 6;
- public static final int COMPTYPE_IDX = 7;
-
- public static final int[] ALL_FIELDS_INT = {
- FILEID_IDX,
- FILENAME_IDX,
- ZIPFILE_IDX,
- MOD_IDX,
- CRC_IDX,
- COMPLEN_IDX,
- UNCOMPLEN_IDX,
- COMPTYPE_IDX
- };
-
- /**
- * This needs to match the authority in your manifest
- */
- public abstract String getAuthority();
-
- @Override
- public int delete(Uri arg0, String arg1, String[] arg2) {
- // TODO Auto-generated method stub
- return 0;
- }
-
- @Override
- public String getType(Uri uri) {
- return "vnd.android.cursor.item/asset";
- }
-
- @Override
- public Uri insert(Uri uri, ContentValues values) {
- // TODO Auto-generated method stub
- return null;
- }
-
- static private final String NO_FILE = "N";
-
- private boolean initIfNecessary() {
- if ( !mInit ) {
- Context ctx = getContext();
- PackageManager pm = ctx.getPackageManager();
- ProviderInfo pi = pm.resolveContentProvider(getAuthority(), PackageManager.GET_META_DATA);
- PackageInfo packInfo;
- try {
- packInfo = pm.getPackageInfo(ctx.getPackageName(), 0);
- } catch (NameNotFoundException e1) {
- e1.printStackTrace();
- return false;
- }
- int patchFileVersion;
- int mainFileVersion;
- int appVersionCode = packInfo.versionCode;
- String[] resourceFiles = null;
- if ( null != pi.metaData ) {
- mainFileVersion = pi.metaData.getInt("mainVersion", appVersionCode);
- patchFileVersion = pi.metaData.getInt("patchVersion", appVersionCode);
- String mainFileName = pi.metaData.getString("mainFilename", NO_FILE);
- if ( NO_FILE != mainFileName ) {
- String patchFileName = pi.metaData.getString("patchFilename", NO_FILE);
- if ( NO_FILE != patchFileName ) {
- resourceFiles = new String[] { mainFileName, patchFileName };
- } else {
- resourceFiles = new String[] { mainFileName };
- }
- }
- } else {
- mainFileVersion = patchFileVersion = appVersionCode;
- }
- try {
- if ( null == resourceFiles ) {
- mAPKExtensionFile = APKExpansionSupport.getAPKExpansionZipFile(ctx, mainFileVersion, patchFileVersion);
- } else {
- mAPKExtensionFile = APKExpansionSupport.getResourceZipFile(resourceFiles);
- }
- mInit = true;
- return true;
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return false;
- }
-
- @Override
- public boolean onCreate() {
- return true;
- }
-
- @Override
- public AssetFileDescriptor openAssetFile(Uri uri, String mode)
- throws FileNotFoundException {
- initIfNecessary();
- String path = uri.getEncodedPath();
- if ( path.startsWith("/") ) {
- path = path.substring(1);
- }
- return mAPKExtensionFile.getAssetFileDescriptor(path);
- }
-
- @Override
- public ContentProviderResult[] applyBatch(
- ArrayList operations)
- throws OperationApplicationException {
- initIfNecessary();
- return super.applyBatch(operations);
- }
-
- @Override
- public ParcelFileDescriptor openFile(Uri uri, String mode)
- throws FileNotFoundException {
- initIfNecessary();
- AssetFileDescriptor af = openAssetFile(uri, mode);
- if ( null != af ) {
- return af.getParcelFileDescriptor();
- }
- return null;
- }
-
- @Override
- public Cursor query(Uri uri, String[] projection, String selection,
- String[] selectionArgs, String sortOrder) {
- initIfNecessary();
- // lists all of the items in the file that match
- ZipEntryRO[] zipEntries;
- if ( null == mAPKExtensionFile ) {
- zipEntries = new ZipEntryRO[0];
- } else {
- zipEntries = mAPKExtensionFile.getAllEntries();
- }
- int[] intProjection;
- if ( null == projection ) {
- intProjection = ALL_FIELDS_INT;
- projection = ALL_FIELDS;
- } else {
- int len = projection.length;
- intProjection = new int[len];
- for ( int i = 0; i < len; i++ ) {
- if ( projection[i].equals(FILEID) ) {
- intProjection[i] = FILEID_IDX;
- } else if ( projection[i].equals(FILENAME) ) {
- intProjection[i] = FILENAME_IDX;
- } else if ( projection[i].equals(ZIPFILE) ) {
- intProjection[i] = ZIPFILE_IDX;
- } else if ( projection[i].equals(MODIFICATION) ) {
- intProjection[i] = MOD_IDX;
- } else if ( projection[i].equals(CRC32) ) {
- intProjection[i] = CRC_IDX;
- } else if ( projection[i].equals(COMPRESSEDLEN) ) {
- intProjection[i] = COMPLEN_IDX;
- } else if ( projection[i].equals(UNCOMPRESSEDLEN) ) {
- intProjection[i] = UNCOMPLEN_IDX;
- } else if ( projection[i].equals(COMPRESSIONTYPE) ) {
- intProjection[i] = COMPTYPE_IDX;
- } else {
- throw new RuntimeException();
- }
- }
- }
- MatrixCursor mc = new MatrixCursor(projection, zipEntries.length);
- int len = intProjection.length;
- for ( ZipEntryRO zer : zipEntries ) {
- MatrixCursor.RowBuilder rb = mc.newRow();
- for ( int i = 0; i < len; i++ ) {
- switch (intProjection[i]) {
- case FILEID_IDX:
- rb.add(i);
- break;
- case FILENAME_IDX:
- rb.add(zer.mFileName);
- break;
- case ZIPFILE_IDX:
- rb.add(zer.getZipFileName());
- break;
- case MOD_IDX:
- rb.add(zer.mWhenModified);
- break;
- case CRC_IDX:
- rb.add(zer.mCRC32);
- break;
- case COMPLEN_IDX:
- rb.add(zer.mCompressedLength);
- break;
- case UNCOMPLEN_IDX:
- rb.add(zer.mUncompressedLength);
- break;
- case COMPTYPE_IDX:
- rb.add(zer.mMethod);
- break;
- }
- }
- }
- return mc;
- }
-
- @Override
- public int update(Uri uri, ContentValues values, String selection,
- String[] selectionArgs) {
- // TODO Auto-generated method stub
- return 0;
- }
-
-}
diff --git a/android/src/main/java/com/android/vending/expansion/zipfile/APKExpansionSupport.java b/android/src/main/java/com/android/vending/expansion/zipfile/APKExpansionSupport.java
deleted file mode 100644
index 34669c1d..00000000
--- a/android/src/main/java/com/android/vending/expansion/zipfile/APKExpansionSupport.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package com.android.vending.expansion.zipfile;
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import java.io.File;
-import java.io.FileFilter;
-import java.io.IOException;
-import java.util.Vector;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import android.content.Context;
-import android.os.Environment;
-import android.util.Log;
-
-public class APKExpansionSupport {
- // The shared path to all app expansion files
- private final static String EXP_PATH = "/Android/obb/";
-
- static String[] getAPKExpansionFiles(Context ctx, int mainVersion, int patchVersion) {
- String packageName = ctx.getPackageName();
- Vector ret = new Vector();
- if (Environment.getExternalStorageState().equals(
- Environment.MEDIA_MOUNTED)) {
- // Build the full path to the app's expansion files
- File root = Environment.getExternalStorageDirectory();
- File expPath = new File(root.toString() + EXP_PATH + packageName);
-
- // Check that expansion file path exists
- if (expPath.exists()) {
- if ( mainVersion > 0 ) {
- String strMainPath = expPath + File.separator + "main." + mainVersion + "." + packageName + ".obb";
-// Log.d("APKEXPANSION", strMainPath);
- File main = new File(strMainPath);
- if ( main.isFile() ) {
- ret.add(strMainPath);
- }
- }
- if ( patchVersion > 0 ) {
- String strPatchPath = expPath + File.separator + "patch." + patchVersion + "." + packageName + ".obb";
- File main = new File(strPatchPath);
- if ( main.isFile() ) {
- ret.add(strPatchPath);
- }
- }
- }
- }
- String[] retArray = new String[ret.size()];
- ret.toArray(retArray);
- return retArray;
- }
-
- static public ZipResourceFile getResourceZipFile(String[] expansionFiles) throws IOException {
- ZipResourceFile apkExpansionFile = null;
- for (String expansionFilePath : expansionFiles) {
- if ( null == apkExpansionFile ) {
- apkExpansionFile = new ZipResourceFile(expansionFilePath);
- } else {
- apkExpansionFile.addPatchFile(expansionFilePath);
- }
- }
- return apkExpansionFile;
- }
-
- static public ZipResourceFile getAPKExpansionZipFile(Context ctx, int mainVersion, int patchVersion) throws IOException{
- String[] expansionFiles = getAPKExpansionFiles(ctx, mainVersion, patchVersion);
- return getResourceZipFile(expansionFiles);
- }
-}
diff --git a/android/src/main/java/com/android/vending/expansion/zipfile/ZipResourceFile.java b/android/src/main/java/com/android/vending/expansion/zipfile/ZipResourceFile.java
deleted file mode 100644
index 902af3c4..00000000
--- a/android/src/main/java/com/android/vending/expansion/zipfile/ZipResourceFile.java
+++ /dev/null
@@ -1,428 +0,0 @@
-
-package com.android.vending.expansion.zipfile;
-
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import android.content.res.AssetFileDescriptor;
-import android.os.ParcelFileDescriptor;
-import android.util.Log;
-
-import java.io.EOFException;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.RandomAccessFile;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.nio.MappedByteBuffer;
-import java.nio.channels.FileChannel;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Vector;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-
-public class ZipResourceFile {
-
- //
- // Read-only access to Zip archives, with minimal heap allocation.
- //
- static final String LOG_TAG = "zipro";
- static final boolean LOGV = false;
-
- // 4-byte number
- static private int swapEndian(int i)
- {
- return ((i & 0xff) << 24) + ((i & 0xff00) << 8) + ((i & 0xff0000) >>> 8)
- + ((i >>> 24) & 0xff);
- }
-
- // 2-byte number
- static private int swapEndian(short i)
- {
- return ((i & 0x00FF) << 8 | (i & 0xFF00) >>> 8);
- }
-
- /*
- * Zip file constants.
- */
- static final int kEOCDSignature = 0x06054b50;
- static final int kEOCDLen = 22;
- static final int kEOCDNumEntries = 8; // offset to #of entries in file
- static final int kEOCDSize = 12; // size of the central directory
- static final int kEOCDFileOffset = 16; // offset to central directory
-
- static final int kMaxCommentLen = 65535; // longest possible in ushort
- static final int kMaxEOCDSearch = (kMaxCommentLen + kEOCDLen);
-
- static final int kLFHSignature = 0x04034b50;
- static final int kLFHLen = 30; // excluding variable-len fields
- static final int kLFHNameLen = 26; // offset to filename length
- static final int kLFHExtraLen = 28; // offset to extra length
-
- static final int kCDESignature = 0x02014b50;
- static final int kCDELen = 46; // excluding variable-len fields
- static final int kCDEMethod = 10; // offset to compression method
- static final int kCDEModWhen = 12; // offset to modification timestamp
- static final int kCDECRC = 16; // offset to entry CRC
- static final int kCDECompLen = 20; // offset to compressed length
- static final int kCDEUncompLen = 24; // offset to uncompressed length
- static final int kCDENameLen = 28; // offset to filename length
- static final int kCDEExtraLen = 30; // offset to extra length
- static final int kCDECommentLen = 32; // offset to comment length
- static final int kCDELocalOffset = 42; // offset to local hdr
-
- static final int kCompressStored = 0; // no compression
- static final int kCompressDeflated = 8; // standard deflate
-
- /*
- * The values we return for ZipEntryRO use 0 as an invalid value, so we want
- * to adjust the hash table index by a fixed amount. Using a large value
- * helps insure that people don't mix & match arguments, e.g. to
- * findEntryByIndex().
- */
- static final int kZipEntryAdj = 10000;
-
- static public final class ZipEntryRO {
- public ZipEntryRO(final String zipFileName, final File file, final String fileName) {
- mFileName = fileName;
- mZipFileName = zipFileName;
- mFile = file;
- }
-
- public final File mFile;
- public final String mFileName;
- public final String mZipFileName;
- public long mLocalHdrOffset; // offset of local file header
-
- /* useful stuff from the directory entry */
- public int mMethod;
- public long mWhenModified;
- public long mCRC32;
- public long mCompressedLength;
- public long mUncompressedLength;
-
- public long mOffset = -1;
-
- public void setOffsetFromFile(RandomAccessFile f, ByteBuffer buf) throws IOException {
- long localHdrOffset = mLocalHdrOffset;
- try {
- f.seek(localHdrOffset);
- f.readFully(buf.array());
- if (buf.getInt(0) != kLFHSignature) {
- Log.w(LOG_TAG, "didn't find signature at start of lfh");
- throw new IOException();
- }
- int nameLen = buf.getShort(kLFHNameLen) & 0xFFFF;
- int extraLen = buf.getShort(kLFHExtraLen) & 0xFFFF;
- mOffset = localHdrOffset + kLFHLen + nameLen + extraLen;
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException ioe) {
- ioe.printStackTrace();
- }
- }
-
- /**
- * Calculates the offset of the start of the Zip file entry within the
- * Zip file.
- *
- * @return the offset, in bytes from the start of the file of the entry
- */
- public long getOffset() {
- return mOffset;
- }
-
- /**
- * isUncompressed
- *
- * @return true if the file is stored in uncompressed form
- */
- public boolean isUncompressed() {
- return mMethod == kCompressStored;
- }
-
- public AssetFileDescriptor getAssetFileDescriptor() {
- if (mMethod == kCompressStored) {
- ParcelFileDescriptor pfd;
- try {
- pfd = ParcelFileDescriptor.open(mFile, ParcelFileDescriptor.MODE_READ_ONLY);
- return new AssetFileDescriptor(pfd, getOffset(), mUncompressedLength);
- } catch (FileNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- return null;
- }
-
- public String getZipFileName() {
- return mZipFileName;
- }
-
- public File getZipFile() {
- return mFile;
- }
-
- }
-
- private HashMap mHashMap = new HashMap();
-
- /* for reading compressed files */
- public HashMap mZipFiles = new HashMap();
-
- public ZipResourceFile(String zipFileName) throws IOException {
- addPatchFile(zipFileName);
- }
-
- ZipEntryRO[] getEntriesAt(String path) {
- Vector zev = new Vector();
- Collection values = mHashMap.values();
- if (null == path)
- path = "";
- int length = path.length();
- for (ZipEntryRO ze : values) {
- if (ze.mFileName.startsWith(path)) {
- if (-1 == ze.mFileName.indexOf('/', length)) {
- zev.add(ze);
- }
- }
- }
- ZipEntryRO[] entries = new ZipEntryRO[zev.size()];
- return zev.toArray(entries);
- }
-
- public ZipEntryRO[] getAllEntries() {
- Collection values = mHashMap.values();
- return values.toArray(new ZipEntryRO[values.size()]);
- }
-
- /**
- * getAssetFileDescriptor allows for ZipResourceFile to directly feed
- * Android API's that want an fd, offset, and length such as the
- * MediaPlayer. It also allows for the class to be used in a content
- * provider that can feed video players. The file must be stored
- * (non-compressed) in the Zip file for this to work.
- *
- * @param assetPath
- * @return the asset file descriptor for the file, or null if the file isn't
- * present or is stored compressed
- */
- public AssetFileDescriptor getAssetFileDescriptor(String assetPath) {
- ZipEntryRO entry = mHashMap.get(assetPath);
- if (null != entry) {
- return entry.getAssetFileDescriptor();
- }
- return null;
- }
-
- /**
- * getInputStream returns an AssetFileDescriptor.AutoCloseInputStream
- * associated with the asset that is contained in the Zip file, or a
- * standard ZipInputStream if necessary to uncompress the file
- *
- * @param assetPath
- * @return an input stream for the named asset path, or null if not found
- * @throws IOException
- */
- public InputStream getInputStream(String assetPath) throws IOException {
- ZipEntryRO entry = mHashMap.get(assetPath);
- if (null != entry) {
- if (entry.isUncompressed()) {
- return entry.getAssetFileDescriptor().createInputStream();
- } else {
- ZipFile zf = mZipFiles.get(entry.getZipFile());
- /** read compressed files **/
- if (null == zf) {
- zf = new ZipFile(entry.getZipFile(), ZipFile.OPEN_READ);
- mZipFiles.put(entry.getZipFile(), zf);
- }
- ZipEntry zi = zf.getEntry(assetPath);
- if (null != zi)
- return zf.getInputStream(zi);
- }
- }
- return null;
- }
-
- ByteBuffer mLEByteBuffer = ByteBuffer.allocate(4);
-
- static private int read4LE(RandomAccessFile f) throws EOFException, IOException {
- return swapEndian(f.readInt());
- }
-
- /*
- * Opens the specified file read-only. We memory-map the entire thing and
- * close the file before returning.
- */
- void addPatchFile(String zipFileName) throws IOException
- {
- File file = new File(zipFileName);
- RandomAccessFile f = new RandomAccessFile(file, "r");
- long fileLength = f.length();
-
- if (fileLength < kEOCDLen) {
- throw new java.io.IOException();
- }
-
- long readAmount = kMaxEOCDSearch;
- if (readAmount > fileLength)
- readAmount = fileLength;
-
- /*
- * Make sure this is a Zip archive.
- */
- f.seek(0);
-
- int header = read4LE(f);
- if (header == kEOCDSignature) {
- Log.i(LOG_TAG, "Found Zip archive, but it looks empty");
- throw new IOException();
- } else if (header != kLFHSignature) {
- Log.v(LOG_TAG, "Not a Zip archive");
- throw new IOException();
- }
-
- /*
- * Perform the traditional EOCD snipe hunt. We're searching for the End
- * of Central Directory magic number, which appears at the start of the
- * EOCD block. It's followed by 18 bytes of EOCD stuff and up to 64KB of
- * archive comment. We need to read the last part of the file into a
- * buffer, dig through it to find the magic number, parse some values
- * out, and use those to determine the extent of the CD. We start by
- * pulling in the last part of the file.
- */
- long searchStart = fileLength - readAmount;
-
- f.seek(searchStart);
- ByteBuffer bbuf = ByteBuffer.allocate((int) readAmount);
- byte[] buffer = bbuf.array();
- f.readFully(buffer);
- bbuf.order(ByteOrder.LITTLE_ENDIAN);
-
- /*
- * Scan backward for the EOCD magic. In an archive without a trailing
- * comment, we'll find it on the first try. (We may want to consider
- * doing an initial minimal read; if we don't find it, retry with a
- * second read as above.)
- */
-
- // EOCD == 0x50, 0x4b, 0x05, 0x06
- int eocdIdx;
- for (eocdIdx = buffer.length - kEOCDLen; eocdIdx >= 0; eocdIdx--) {
- if (buffer[eocdIdx] == 0x50 && bbuf.getInt(eocdIdx) == kEOCDSignature)
- {
- if (LOGV) {
- Log.v(LOG_TAG, "+++ Found EOCD at index: " + eocdIdx);
- }
- break;
- }
- }
-
- if (eocdIdx < 0) {
- Log.d(LOG_TAG, "Zip: EOCD not found, " + zipFileName + " is not zip");
- }
-
- /*
- * Grab the CD offset and size, and the number of entries in the
- * archive. After that, we can release our EOCD hunt buffer.
- */
-
- int numEntries = bbuf.getShort(eocdIdx + kEOCDNumEntries);
- long dirSize = bbuf.getInt(eocdIdx + kEOCDSize) & 0xffffffffL;
- long dirOffset = bbuf.getInt(eocdIdx + kEOCDFileOffset) & 0xffffffffL;
-
- // Verify that they look reasonable.
- if (dirOffset + dirSize > fileLength) {
- Log.w(LOG_TAG, "bad offsets (dir " + dirOffset + ", size " + dirSize + ", eocd "
- + eocdIdx + ")");
- throw new IOException();
- }
- if (numEntries == 0) {
- Log.w(LOG_TAG, "empty archive?");
- throw new IOException();
- }
-
- if (LOGV) {
- Log.v(LOG_TAG, "+++ numEntries=" + numEntries + " dirSize=" + dirSize + " dirOffset="
- + dirOffset);
- }
-
- MappedByteBuffer directoryMap = f.getChannel()
- .map(FileChannel.MapMode.READ_ONLY, dirOffset, dirSize);
- directoryMap.order(ByteOrder.LITTLE_ENDIAN);
-
- byte[] tempBuf = new byte[0xffff];
-
- /*
- * Walk through the central directory, adding entries to the hash table.
- */
-
- int currentOffset = 0;
-
- /*
- * Allocate the local directory information
- */
- ByteBuffer buf = ByteBuffer.allocate(kLFHLen);
- buf.order(ByteOrder.LITTLE_ENDIAN);
-
- for (int i = 0; i < numEntries; i++) {
- if (directoryMap.getInt(currentOffset) != kCDESignature) {
- Log.w(LOG_TAG, "Missed a central dir sig (at " + currentOffset + ")");
- throw new IOException();
- }
-
- /* useful stuff from the directory entry */
- int fileNameLen = directoryMap.getShort(currentOffset + kCDENameLen) & 0xffff;
- int extraLen = directoryMap.getShort(currentOffset + kCDEExtraLen) & 0xffff;
- int commentLen = directoryMap.getShort(currentOffset + kCDECommentLen) & 0xffff;
-
- /* get the CDE filename */
-
- directoryMap.position(currentOffset + kCDELen);
- directoryMap.get(tempBuf, 0, fileNameLen);
- directoryMap.position(0);
-
- /* UTF-8 on Android */
- String str = new String(tempBuf, 0, fileNameLen);
- if (LOGV) {
- Log.v(LOG_TAG, "Filename: " + str);
- }
-
- ZipEntryRO ze = new ZipEntryRO(zipFileName, file, str);
- ze.mMethod = directoryMap.getShort(currentOffset + kCDEMethod) & 0xffff;
- ze.mWhenModified = directoryMap.getInt(currentOffset + kCDEModWhen) & 0xffffffffL;
- ze.mCRC32 = directoryMap.getLong(currentOffset + kCDECRC) & 0xffffffffL;
- ze.mCompressedLength = directoryMap.getLong(currentOffset + kCDECompLen) & 0xffffffffL;
- ze.mUncompressedLength = directoryMap.getLong(currentOffset + kCDEUncompLen) & 0xffffffffL;
- ze.mLocalHdrOffset = directoryMap.getInt(currentOffset + kCDELocalOffset) & 0xffffffffL;
-
- // set the offsets
- buf.clear();
- ze.setOffsetFromFile(f, buf);
-
- // put file into hash
- mHashMap.put(str, ze);
-
- // go to next directory entry
- currentOffset += kCDELen + fileNameLen + extraLen + commentLen;
- }
- if (LOGV) {
- Log.v(LOG_TAG, "+++ zip good scan " + numEntries + " entries");
- }
- }
-}
diff --git a/android/src/main/java/com/brentvatne/ReactBridgeUtils.java b/android/src/main/java/com/brentvatne/ReactBridgeUtils.java
new file mode 100644
index 00000000..c3391283
--- /dev/null
+++ b/android/src/main/java/com/brentvatne/ReactBridgeUtils.java
@@ -0,0 +1,22 @@
+package com.brentvatne;
+
+import com.facebook.react.bridge.ReadableMap;
+
+/*
+* This file define static helpers to parse in an easier way input props
+ */
+public class ReactBridgeUtils {
+ /*
+ retrieve key from map as int. fallback is returned if not available
+ */
+ static public int safeGetInt(ReadableMap map, String key, int fallback) {
+ return map != null && map.hasKey(key) && !map.isNull(key) ? map.getInt(key) : fallback;
+ }
+
+ /*
+ retrieve key from map as double. fallback is returned if not available
+ */
+ static public double safeGetDouble(ReadableMap map, String key, double fallback) {
+ return map != null && map.hasKey(key) && !map.isNull(key) ? map.getDouble(key) : fallback;
+ }
+}
diff --git a/android-exoplayer/src/main/java/com/brentvatne/exoplayer/AspectRatioFrameLayout.java b/android/src/main/java/com/brentvatne/exoplayer/AspectRatioFrameLayout.java
similarity index 98%
rename from android-exoplayer/src/main/java/com/brentvatne/exoplayer/AspectRatioFrameLayout.java
rename to android/src/main/java/com/brentvatne/exoplayer/AspectRatioFrameLayout.java
index 5079451b..ea2cd4dd 100644
--- a/android-exoplayer/src/main/java/com/brentvatne/exoplayer/AspectRatioFrameLayout.java
+++ b/android/src/main/java/com/brentvatne/exoplayer/AspectRatioFrameLayout.java
@@ -67,6 +67,10 @@ public final class AspectRatioFrameLayout extends FrameLayout {
return videoAspectRatio;
}
+ public void invalidateAspectRatio() {
+ videoAspectRatio = 0;
+ }
+
/**
* Sets the resize mode which can be of value {@link ResizeMode.Mode}
*
diff --git a/android-exoplayer/src/main/java/com/brentvatne/exoplayer/DataSourceUtil.java b/android/src/main/java/com/brentvatne/exoplayer/DataSourceUtil.java
similarity index 73%
rename from android-exoplayer/src/main/java/com/brentvatne/exoplayer/DataSourceUtil.java
rename to android/src/main/java/com/brentvatne/exoplayer/DataSourceUtil.java
index 487efeb0..c5e7047b 100644
--- a/android-exoplayer/src/main/java/com/brentvatne/exoplayer/DataSourceUtil.java
+++ b/android/src/main/java/com/brentvatne/exoplayer/DataSourceUtil.java
@@ -4,13 +4,14 @@ import com.facebook.react.bridge.ReactContext;
import com.facebook.react.modules.network.CookieJarContainer;
import com.facebook.react.modules.network.ForwardingCookieHandler;
import com.facebook.react.modules.network.OkHttpClientProvider;
-import com.google.android.exoplayer2.ext.okhttp.OkHttpDataSourceFactory;
+import com.google.android.exoplayer2.ext.okhttp.OkHttpDataSource;
import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter;
-import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
+import com.google.android.exoplayer2.upstream.DefaultDataSource;
import com.google.android.exoplayer2.upstream.HttpDataSource;
import com.google.android.exoplayer2.util.Util;
+import okhttp3.Call;
import okhttp3.JavaNetCookieJar;
import okhttp3.OkHttpClient;
import java.util.Map;
@@ -22,6 +23,7 @@ public class DataSourceUtil {
private static DataSource.Factory rawDataSourceFactory = null;
private static DataSource.Factory defaultDataSourceFactory = null;
+ private static HttpDataSource.Factory defaultHttpDataSourceFactory = null;
private static String userAgent = null;
public static void setUserAgent(String userAgent) {
@@ -58,12 +60,23 @@ public class DataSourceUtil {
DataSourceUtil.defaultDataSourceFactory = factory;
}
+ public static HttpDataSource.Factory getDefaultHttpDataSourceFactory(ReactContext context, DefaultBandwidthMeter bandwidthMeter, Map requestHeaders) {
+ if (defaultHttpDataSourceFactory == null || (requestHeaders != null && !requestHeaders.isEmpty())) {
+ defaultHttpDataSourceFactory = buildHttpDataSourceFactory(context, bandwidthMeter, requestHeaders);
+ }
+ return defaultHttpDataSourceFactory;
+ }
+
+ public static void setDefaultHttpDataSourceFactory(HttpDataSource.Factory factory) {
+ DataSourceUtil.defaultHttpDataSourceFactory = factory;
+ }
+
private static DataSource.Factory buildRawDataSourceFactory(ReactContext context) {
return new RawResourceDataSourceFactory(context.getApplicationContext());
}
private static DataSource.Factory buildDataSourceFactory(ReactContext context, DefaultBandwidthMeter bandwidthMeter, Map requestHeaders) {
- return new DefaultDataSourceFactory(context, bandwidthMeter,
+ return new DefaultDataSource.Factory(context,
buildHttpDataSourceFactory(context, bandwidthMeter, requestHeaders));
}
@@ -72,10 +85,12 @@ public class DataSourceUtil {
CookieJarContainer container = (CookieJarContainer) client.cookieJar();
ForwardingCookieHandler handler = new ForwardingCookieHandler(context);
container.setCookieJar(new JavaNetCookieJar(handler));
- OkHttpDataSourceFactory okHttpDataSourceFactory = new OkHttpDataSourceFactory(client, getUserAgent(context), bandwidthMeter);
+ OkHttpDataSource.Factory okHttpDataSourceFactory = new OkHttpDataSource.Factory((Call.Factory) client)
+ .setUserAgent(getUserAgent(context))
+ .setTransferListener(bandwidthMeter);
if (requestHeaders != null)
- okHttpDataSourceFactory.getDefaultRequestProperties().set(requestHeaders);
+ okHttpDataSourceFactory.setDefaultRequestProperties(requestHeaders);
return okHttpDataSourceFactory;
}
diff --git a/android-exoplayer/src/main/java/com/brentvatne/exoplayer/DefaultReactExoplayerConfig.java b/android/src/main/java/com/brentvatne/exoplayer/DefaultReactExoplayerConfig.java
similarity index 60%
rename from android-exoplayer/src/main/java/com/brentvatne/exoplayer/DefaultReactExoplayerConfig.java
rename to android/src/main/java/com/brentvatne/exoplayer/DefaultReactExoplayerConfig.java
index d68274b7..3475273c 100644
--- a/android-exoplayer/src/main/java/com/brentvatne/exoplayer/DefaultReactExoplayerConfig.java
+++ b/android/src/main/java/com/brentvatne/exoplayer/DefaultReactExoplayerConfig.java
@@ -9,16 +9,28 @@ import com.google.android.exoplayer2.upstream.LoadErrorHandlingPolicy;
public class DefaultReactExoplayerConfig implements ReactExoplayerConfig {
private final DefaultBandwidthMeter bandwidthMeter;
+ private boolean disableDisconnectError = false;
public DefaultReactExoplayerConfig(Context context) {
this.bandwidthMeter = new DefaultBandwidthMeter.Builder(context).build();
}
- @Override
public LoadErrorHandlingPolicy buildLoadErrorHandlingPolicy(int minLoadRetryCount) {
+ if (this.disableDisconnectError) {
+ // Use custom error handling policy to prevent throwing an error when losing network connection
+ return new ReactExoplayerLoadErrorHandlingPolicy(minLoadRetryCount);
+ }
return new DefaultLoadErrorHandlingPolicy(minLoadRetryCount);
}
+ public void setDisableDisconnectError(boolean disableDisconnectError) {
+ this.disableDisconnectError = disableDisconnectError;
+ }
+
+ public boolean getDisableDisconnectError() {
+ return this.disableDisconnectError;
+ }
+
@Override
public DefaultBandwidthMeter getBandwidthMeter() {
return bandwidthMeter;
diff --git a/android-exoplayer/src/main/java/com/brentvatne/exoplayer/ExoPlayerView.java b/android/src/main/java/com/brentvatne/exoplayer/ExoPlayerView.java
similarity index 70%
rename from android-exoplayer/src/main/java/com/brentvatne/exoplayer/ExoPlayerView.java
rename to android/src/main/java/com/brentvatne/exoplayer/ExoPlayerView.java
index 9f3d09be..462d610c 100644
--- a/android-exoplayer/src/main/java/com/brentvatne/exoplayer/ExoPlayerView.java
+++ b/android/src/main/java/com/brentvatne/exoplayer/ExoPlayerView.java
@@ -5,6 +5,7 @@ import android.content.Context;
import androidx.core.content.ContextCompat;
import android.util.AttributeSet;
import android.util.Log;
+import android.util.TypedValue;
import android.view.Gravity;
import android.view.SurfaceView;
import android.view.TextureView;
@@ -13,16 +14,16 @@ import android.view.ViewGroup;
import android.widget.FrameLayout;
import com.google.android.exoplayer2.C;
-import com.google.android.exoplayer2.ExoPlaybackException;
-import com.google.android.exoplayer2.ExoPlayer;
+import com.google.android.exoplayer2.PlaybackException;
import com.google.android.exoplayer2.PlaybackParameters;
-import com.google.android.exoplayer2.SimpleExoPlayer;
+import com.google.android.exoplayer2.Player;
+import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.Timeline;
-import com.google.android.exoplayer2.source.TrackGroupArray;
+import com.google.android.exoplayer2.Tracks;
import com.google.android.exoplayer2.text.Cue;
-import com.google.android.exoplayer2.text.TextRenderer;
import com.google.android.exoplayer2.trackselection.TrackSelectionArray;
import com.google.android.exoplayer2.ui.SubtitleView;
+import com.google.android.exoplayer2.video.VideoSize;
import java.util.List;
@@ -34,11 +35,12 @@ public final class ExoPlayerView extends FrameLayout {
private final SubtitleView subtitleLayout;
private final AspectRatioFrameLayout layout;
private final ComponentListener componentListener;
- private SimpleExoPlayer player;
+ private ExoPlayer player;
private Context context;
private ViewGroup.LayoutParams layoutParams;
private boolean useTextureView = true;
+ private boolean useSecureView = false;
private boolean hideShutterView = false;
public ExoPlayerView(Context context) {
@@ -84,6 +86,14 @@ public final class ExoPlayerView extends FrameLayout {
addViewInLayout(layout, 0, aspectRatioParams);
}
+ private void clearVideoView() {
+ if (surfaceView instanceof TextureView) {
+ player.clearVideoTextureView((TextureView) surfaceView);
+ } else if (surfaceView instanceof SurfaceView) {
+ player.clearVideoSurfaceView((SurfaceView) surfaceView);
+ }
+ }
+
private void setVideoView() {
if (surfaceView instanceof TextureView) {
player.setVideoTextureView((TextureView) surfaceView);
@@ -91,9 +101,27 @@ public final class ExoPlayerView extends FrameLayout {
player.setVideoSurfaceView((SurfaceView) surfaceView);
}
}
+ public void setSubtitleStyle(SubtitleStyle style) {
+ // ensure we reset subtile style before reapplying it
+ subtitleLayout.setUserDefaultStyle();
+ subtitleLayout.setUserDefaultTextSize();
+
+ if (style.getFontSize() > 0) {
+ subtitleLayout.setFixedTextSize(TypedValue.COMPLEX_UNIT_SP, style.getFontSize());
+ }
+ subtitleLayout.setPadding(style.getPaddingLeft(), style.getPaddingTop(), style.getPaddingRight(), style.getPaddingBottom());
+ }
private void updateSurfaceView() {
- View view = useTextureView ? new TextureView(context) : new SurfaceView(context);
+ View view;
+ if (!useTextureView || useSecureView) {
+ view = new SurfaceView(context);
+ if (useSecureView) {
+ ((SurfaceView)view).setSecure(true);
+ }
+ } else {
+ view = new TextureView(context);
+ }
view.setLayoutParams(layoutParams);
surfaceView = view;
@@ -112,29 +140,25 @@ public final class ExoPlayerView extends FrameLayout {
}
/**
- * Set the {@link SimpleExoPlayer} to use. The {@link SimpleExoPlayer#setTextOutput} and
- * {@link SimpleExoPlayer#setVideoListener} method of the player will be called and previous
+ * Set the {@link ExoPlayer} to use. The {@link ExoPlayer#addListener} method of the
+ * player will be called and previous
* assignments are overridden.
*
- * @param player The {@link SimpleExoPlayer} to use.
+ * @param player The {@link ExoPlayer} to use.
*/
- public void setPlayer(SimpleExoPlayer player) {
+ public void setPlayer(ExoPlayer player) {
if (this.player == player) {
return;
}
if (this.player != null) {
- this.player.setTextOutput(null);
- this.player.setVideoListener(null);
this.player.removeListener(componentListener);
- this.player.setVideoSurface(null);
+ clearVideoView();
}
this.player = player;
- shutterView.setVisibility(VISIBLE);
+ shutterView.setVisibility(this.hideShutterView ? View.INVISIBLE : View.VISIBLE);
if (player != null) {
setVideoView();
- player.setVideoListener(componentListener);
player.addListener(componentListener);
- player.setTextOutput(componentListener);
}
}
@@ -168,6 +192,13 @@ public final class ExoPlayerView extends FrameLayout {
}
}
+ public void useSecureView(boolean useSecureView) {
+ if (useSecureView != this.useSecureView) {
+ this.useSecureView = useSecureView;
+ updateSurfaceView();
+ }
+ }
+
public void setHideShutterView(boolean hideShutterView) {
this.hideShutterView = hideShutterView;
updateShutterViewVisibility();
@@ -196,25 +227,29 @@ public final class ExoPlayerView extends FrameLayout {
}
}
// Video disabled so the shutter must be closed.
- shutterView.setVisibility(VISIBLE);
+ shutterView.setVisibility(this.hideShutterView ? View.INVISIBLE : View.VISIBLE);
}
- private final class ComponentListener implements SimpleExoPlayer.VideoListener,
- TextRenderer.Output, ExoPlayer.EventListener {
+ public void invalidateAspectRatio() {
+ // Resetting aspect ratio will force layout refresh on next video size changed
+ layout.invalidateAspectRatio();
+ }
+
+ private final class ComponentListener implements Player.Listener {
// TextRenderer.Output implementation
@Override
public void onCues(List cues) {
- subtitleLayout.onCues(cues);
+ subtitleLayout.setCues(cues);
}
- // SimpleExoPlayer.VideoListener implementation
+ // ExoPlayer.VideoListener implementation
@Override
- public void onVideoSizeChanged(int width, int height, int unappliedRotationDegrees, float pixelWidthHeightRatio) {
+ public void onVideoSizeChanged(VideoSize videoSize) {
boolean isInitialRatio = layout.getAspectRatio() == 0;
- layout.setAspectRatio(height == 0 ? 1 : (width * pixelWidthHeightRatio) / height);
+ layout.setAspectRatio(videoSize.height == 0 ? 1 : (videoSize.width * videoSize.pixelWidthHeightRatio) / videoSize.height);
// React native workaround for measuring and layout on initial load.
if (isInitialRatio) {
@@ -230,32 +265,37 @@ public final class ExoPlayerView extends FrameLayout {
// ExoPlayer.EventListener implementation
@Override
- public void onLoadingChanged(boolean isLoading) {
+ public void onIsLoadingChanged(boolean isLoading) {
// Do nothing.
}
@Override
- public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
+ public void onPlaybackStateChanged(int playbackState) {
// Do nothing.
}
@Override
- public void onPlayerError(ExoPlaybackException e) {
+ public void onPlayWhenReadyChanged(boolean playWhenReady, int reason) {
// Do nothing.
}
@Override
- public void onPositionDiscontinuity(int reason) {
+ public void onPlayerError(PlaybackException e) {
// Do nothing.
}
@Override
- public void onTimelineChanged(Timeline timeline, Object manifest, int reason) {
+ public void onPositionDiscontinuity(Player.PositionInfo oldPosition, Player.PositionInfo newPosition, int reason) {
// Do nothing.
}
@Override
- public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {
+ public void onTimelineChanged(Timeline timeline, int reason) {
+ // Do nothing.
+ }
+
+ @Override
+ public void onTracksChanged(Tracks tracks) {
updateForCurrentTrackSelections();
}
@@ -264,11 +304,6 @@ public final class ExoPlayerView extends FrameLayout {
// Do nothing
}
- @Override
- public void onSeekProcessed() {
- // Do nothing.
- }
-
@Override
public void onShuffleModeEnabledChanged(boolean shuffleModeEnabled) {
// Do nothing.
diff --git a/android/src/main/java/com/brentvatne/exoplayer/FullScreenPlayerView.java b/android/src/main/java/com/brentvatne/exoplayer/FullScreenPlayerView.java
new file mode 100644
index 00000000..f57bb964
--- /dev/null
+++ b/android/src/main/java/com/brentvatne/exoplayer/FullScreenPlayerView.java
@@ -0,0 +1,80 @@
+package com.brentvatne.exoplayer;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+import android.widget.ImageButton;
+
+import androidx.activity.OnBackPressedCallback;
+
+import com.google.android.exoplayer2.ui.PlayerControlView;
+
+public class FullScreenPlayerView extends Dialog {
+ private final PlayerControlView playerControlView;
+ private final ExoPlayerView exoPlayerView;
+ private ViewGroup parent;
+ private final FrameLayout containerView;
+ private final OnBackPressedCallback onBackPressedCallback;
+
+ public FullScreenPlayerView(Context context, ExoPlayerView exoPlayerView, PlayerControlView playerControlView, OnBackPressedCallback onBackPressedCallback) {
+ super(context, android.R.style.Theme_Black_NoTitleBar_Fullscreen);
+ this.playerControlView = playerControlView;
+ this.exoPlayerView = exoPlayerView;
+ this.onBackPressedCallback = onBackPressedCallback;
+ containerView = new FrameLayout(context);
+ setContentView(containerView, generateDefaultLayoutParams());
+ }
+
+ @Override
+ public void onBackPressed() {
+ super.onBackPressed();
+ onBackPressedCallback.handleOnBackPressed();
+ }
+
+ @Override
+ protected void onStart() {
+ parent = (FrameLayout)(exoPlayerView.getParent());
+
+ parent.removeView(exoPlayerView);
+ containerView.addView(exoPlayerView, generateDefaultLayoutParams());
+
+ if (playerControlView != null) {
+ ImageButton imageButton = playerControlView.findViewById(com.brentvatne.react.R.id.exo_fullscreen);
+ imageButton.setImageResource(com.google.android.exoplayer2.ui.R.drawable.exo_icon_fullscreen_exit);
+ imageButton.setContentDescription(getContext().getString(com.google.android.exoplayer2.ui.R.string.exo_controls_fullscreen_exit_description));
+ parent.removeView(playerControlView);
+ containerView.addView(playerControlView, generateDefaultLayoutParams());
+ }
+
+ super.onStart();
+ }
+
+ @Override
+ protected void onStop() {
+ containerView.removeView(exoPlayerView);
+ parent.addView(exoPlayerView, generateDefaultLayoutParams());
+
+ if (playerControlView != null) {
+ ImageButton imageButton = playerControlView.findViewById(com.brentvatne.react.R.id.exo_fullscreen);
+ imageButton.setImageResource(com.google.android.exoplayer2.ui.R.drawable.exo_icon_fullscreen_enter);
+ imageButton.setContentDescription(getContext().getString(com.google.android.exoplayer2.ui.R.string.exo_controls_fullscreen_enter_description));
+ containerView.removeView(playerControlView);
+ parent.addView(playerControlView, generateDefaultLayoutParams());
+ }
+
+ parent.requestLayout();
+ parent = null;
+
+ super.onStop();
+ }
+
+ private FrameLayout.LayoutParams generateDefaultLayoutParams() {
+ FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(
+ FrameLayout.LayoutParams.MATCH_PARENT,
+ FrameLayout.LayoutParams.MATCH_PARENT
+ );
+ layoutParams.setMargins(0, 0, 0, 0);
+ return layoutParams;
+ }
+}
diff --git a/android-exoplayer/src/main/java/com/brentvatne/exoplayer/RawResourceDataSourceFactory.java b/android/src/main/java/com/brentvatne/exoplayer/RawResourceDataSourceFactory.java
similarity index 100%
rename from android-exoplayer/src/main/java/com/brentvatne/exoplayer/RawResourceDataSourceFactory.java
rename to android/src/main/java/com/brentvatne/exoplayer/RawResourceDataSourceFactory.java
diff --git a/android-exoplayer/src/main/java/com/brentvatne/exoplayer/ReactExoplayerConfig.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerConfig.java
similarity index 78%
rename from android-exoplayer/src/main/java/com/brentvatne/exoplayer/ReactExoplayerConfig.java
rename to android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerConfig.java
index 522578b7..2cc56f9a 100644
--- a/android-exoplayer/src/main/java/com/brentvatne/exoplayer/ReactExoplayerConfig.java
+++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerConfig.java
@@ -9,5 +9,8 @@ import com.google.android.exoplayer2.upstream.LoadErrorHandlingPolicy;
public interface ReactExoplayerConfig {
LoadErrorHandlingPolicy buildLoadErrorHandlingPolicy(int minLoadRetryCount);
+ void setDisableDisconnectError(boolean disableDisconnectError);
+ boolean getDisableDisconnectError();
+
DefaultBandwidthMeter getBandwidthMeter();
}
diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerLoadErrorHandlingPolicy.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerLoadErrorHandlingPolicy.java
new file mode 100644
index 00000000..d0d68de1
--- /dev/null
+++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerLoadErrorHandlingPolicy.java
@@ -0,0 +1,36 @@
+package com.brentvatne.exoplayer;
+
+import java.io.IOException;
+import com.google.android.exoplayer2.upstream.DefaultLoadErrorHandlingPolicy;
+import com.google.android.exoplayer2.upstream.HttpDataSource.HttpDataSourceException;
+import com.google.android.exoplayer2.upstream.LoadErrorHandlingPolicy.LoadErrorInfo;
+import com.google.android.exoplayer2.C;
+
+public final class ReactExoplayerLoadErrorHandlingPolicy extends DefaultLoadErrorHandlingPolicy {
+ private int minLoadRetryCount = Integer.MAX_VALUE;
+
+ public ReactExoplayerLoadErrorHandlingPolicy(int minLoadRetryCount) {
+ super(minLoadRetryCount);
+ this.minLoadRetryCount = minLoadRetryCount;
+ }
+
+ @Override
+ public long getRetryDelayMsFor(LoadErrorInfo loadErrorInfo) {
+ if (
+ loadErrorInfo.exception instanceof HttpDataSourceException &&
+ (loadErrorInfo.exception.getMessage() == "Unable to connect" || loadErrorInfo.exception.getMessage() == "Software caused connection abort")
+ ) {
+ // Capture the error we get when there is no network connectivity and keep retrying it
+ return 1000; // Retry every second
+ } else if(loadErrorInfo.errorCount < this.minLoadRetryCount) {
+ return Math.min((loadErrorInfo.errorCount - 1) * 1000, 5000); // Default timeout handling
+ } else {
+ return C.TIME_UNSET; // Done retrying and will return the error immediately
+ }
+ }
+
+ @Override
+ public int getMinimumLoadableRetryCount(int dataType) {
+ return Integer.MAX_VALUE;
+ }
+}
\ No newline at end of file
diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java
new file mode 100644
index 00000000..6d94dc6c
--- /dev/null
+++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java
@@ -0,0 +1,1908 @@
+package com.brentvatne.exoplayer;
+
+import android.annotation.SuppressLint;
+import android.app.Activity;
+import android.app.ActivityManager;
+import android.content.Context;
+import android.media.AudioManager;
+import android.net.Uri;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.View;
+import android.view.Window;
+import android.view.accessibility.CaptioningManager;
+import android.widget.FrameLayout;
+import android.widget.ImageButton;
+
+import androidx.activity.OnBackPressedCallback;
+
+import com.brentvatne.react.R;
+import com.brentvatne.receiver.AudioBecomingNoisyReceiver;
+import com.brentvatne.receiver.BecomingNoisyListener;
+import com.facebook.react.bridge.Arguments;
+import com.facebook.react.bridge.Dynamic;
+import com.facebook.react.bridge.LifecycleEventListener;
+import com.facebook.react.bridge.ReadableArray;
+import com.facebook.react.bridge.ReadableMap;
+import com.facebook.react.bridge.WritableArray;
+import com.facebook.react.bridge.WritableMap;
+import com.facebook.react.uimanager.ThemedReactContext;
+import com.facebook.react.util.RNLog;
+import com.google.android.exoplayer2.C;
+import com.google.android.exoplayer2.DefaultLoadControl;
+import com.google.android.exoplayer2.DefaultRenderersFactory;
+import com.google.android.exoplayer2.ExoPlaybackException;
+import com.google.android.exoplayer2.drm.MediaDrmCallbackException;
+import com.google.android.exoplayer2.drm.DrmSession.DrmSessionException;
+import com.google.android.exoplayer2.Format;
+import com.google.android.exoplayer2.MediaItem;
+import com.google.android.exoplayer2.PlaybackException;
+import com.google.android.exoplayer2.PlaybackParameters;
+import com.google.android.exoplayer2.Player;
+import com.google.android.exoplayer2.ExoPlayer;
+import com.google.android.exoplayer2.Timeline;
+import com.google.android.exoplayer2.Tracks;
+import com.google.android.exoplayer2.drm.DefaultDrmSessionManager;
+import com.google.android.exoplayer2.drm.DefaultDrmSessionManagerProvider;
+import com.google.android.exoplayer2.drm.DrmSessionEventListener;
+import com.google.android.exoplayer2.drm.DrmSessionManager;
+import com.google.android.exoplayer2.drm.DrmSessionManagerProvider;
+import com.google.android.exoplayer2.drm.ExoMediaDrm;
+import com.google.android.exoplayer2.drm.FrameworkMediaDrm;
+import com.google.android.exoplayer2.drm.HttpMediaDrmCallback;
+import com.google.android.exoplayer2.drm.MediaDrmCallbackException;
+import com.google.android.exoplayer2.drm.UnsupportedDrmException;
+import com.google.android.exoplayer2.mediacodec.MediaCodecInfo;
+import com.google.android.exoplayer2.mediacodec.MediaCodecRenderer;
+import com.google.android.exoplayer2.mediacodec.MediaCodecUtil;
+import com.google.android.exoplayer2.metadata.Metadata;
+import com.google.android.exoplayer2.source.BehindLiveWindowException;
+import com.google.android.exoplayer2.source.MediaSource;
+import com.google.android.exoplayer2.source.MergingMediaSource;
+import com.google.android.exoplayer2.source.ProgressiveMediaSource;
+import com.google.android.exoplayer2.source.SingleSampleMediaSource;
+import com.google.android.exoplayer2.source.TrackGroup;
+import com.google.android.exoplayer2.source.TrackGroupArray;
+import com.google.android.exoplayer2.source.dash.DashMediaSource;
+import com.google.android.exoplayer2.source.dash.DefaultDashChunkSource;
+import com.google.android.exoplayer2.source.hls.HlsMediaSource;
+import com.google.android.exoplayer2.source.smoothstreaming.DefaultSsChunkSource;
+import com.google.android.exoplayer2.source.smoothstreaming.SsMediaSource;
+import com.google.android.exoplayer2.trackselection.AdaptiveTrackSelection;
+import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
+import com.google.android.exoplayer2.trackselection.MappingTrackSelector;
+import com.google.android.exoplayer2.trackselection.ExoTrackSelection;
+import com.google.android.exoplayer2.trackselection.TrackSelectionParameters;
+import com.google.android.exoplayer2.trackselection.TrackSelectionOverride;
+import com.google.android.exoplayer2.ui.PlayerControlView;
+import com.google.android.exoplayer2.upstream.BandwidthMeter;
+import com.google.android.exoplayer2.upstream.DataSource;
+import com.google.android.exoplayer2.upstream.DefaultAllocator;
+import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter;
+import com.google.android.exoplayer2.upstream.HttpDataSource;
+import com.google.android.exoplayer2.util.Assertions;
+import com.google.android.exoplayer2.util.Util;
+import com.google.android.exoplayer2.trackselection.TrackSelection;
+import com.google.android.exoplayer2.source.dash.DashUtil;
+import com.google.android.exoplayer2.source.dash.manifest.DashManifest;
+import com.google.android.exoplayer2.source.dash.manifest.Period;
+import com.google.android.exoplayer2.source.dash.manifest.AdaptationSet;
+import com.google.android.exoplayer2.source.dash.manifest.Representation;
+import com.google.android.exoplayer2.source.dash.manifest.Descriptor;
+
+import java.net.CookieHandler;
+import java.net.CookieManager;
+import java.net.CookiePolicy;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import java.util.UUID;
+import java.util.Map;
+import java.util.Timer;
+import java.util.TimerTask;
+import java.util.List;
+import java.lang.Thread;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Callable;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.lang.Integer;
+
+@SuppressLint("ViewConstructor")
+class ReactExoplayerView extends FrameLayout implements
+ LifecycleEventListener,
+ Player.Listener,
+ BandwidthMeter.EventListener,
+ BecomingNoisyListener,
+ AudioManager.OnAudioFocusChangeListener,
+ DrmSessionEventListener {
+
+ public static final double DEFAULT_MAX_HEAP_ALLOCATION_PERCENT = 1;
+ public static final double DEFAULT_MIN_BACK_BUFFER_MEMORY_RESERVE = 0;
+ public static final double DEFAULT_MIN_BUFFER_MEMORY_RESERVE = 0;
+
+ private static final String TAG = "ReactExoplayerView";
+
+ private static final CookieManager DEFAULT_COOKIE_MANAGER;
+ private static final int SHOW_PROGRESS = 1;
+
+ static {
+ DEFAULT_COOKIE_MANAGER = new CookieManager();
+ DEFAULT_COOKIE_MANAGER.setCookiePolicy(CookiePolicy.ACCEPT_ORIGINAL_SERVER);
+ }
+
+ private final VideoEventEmitter eventEmitter;
+ private final ReactExoplayerConfig config;
+ private final DefaultBandwidthMeter bandwidthMeter;
+ private PlayerControlView playerControlView;
+ private View playPauseControlContainer;
+ private Player.Listener eventListener;
+
+ private ExoPlayerView exoPlayerView;
+ private FullScreenPlayerView fullScreenPlayerView;
+
+ private DataSource.Factory mediaDataSourceFactory;
+ private ExoPlayer player;
+ private DefaultTrackSelector trackSelector;
+ private boolean playerNeedsSource;
+
+ private int resumeWindow;
+ private long resumePosition;
+ private boolean loadVideoStarted;
+ private boolean isFullscreen;
+ private boolean isInBackground;
+ private boolean isPaused;
+ private boolean isBuffering;
+ private boolean muted = false;
+ private boolean hasAudioFocus = false;
+ private float rate = 1f;
+ private float audioVolume = 1f;
+ private int minLoadRetryCount = 3;
+ private int maxBitRate = 0;
+ private long seekTime = C.TIME_UNSET;
+ private boolean hasDrmFailed = false;
+ private boolean isUsingContentResolution = false;
+ private boolean selectTrackWhenReady = false;
+
+ private int minBufferMs = DefaultLoadControl.DEFAULT_MIN_BUFFER_MS;
+ private int maxBufferMs = DefaultLoadControl.DEFAULT_MAX_BUFFER_MS;
+ private int bufferForPlaybackMs = DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_MS;
+ private int bufferForPlaybackAfterRebufferMs = DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_AFTER_REBUFFER_MS;
+ private double maxHeapAllocationPercent = ReactExoplayerView.DEFAULT_MAX_HEAP_ALLOCATION_PERCENT;
+ private double minBackBufferMemoryReservePercent = ReactExoplayerView.DEFAULT_MIN_BACK_BUFFER_MEMORY_RESERVE;
+ private double minBufferMemoryReservePercent = ReactExoplayerView.DEFAULT_MIN_BUFFER_MEMORY_RESERVE;
+ private Handler mainHandler;
+
+ // Props from React
+ private int backBufferDurationMs = DefaultLoadControl.DEFAULT_BACK_BUFFER_DURATION_MS;
+ private Uri srcUri;
+ private String extension;
+ private boolean repeat;
+ private String audioTrackType;
+ private Dynamic audioTrackValue;
+ private String videoTrackType;
+ private Dynamic videoTrackValue;
+ private String textTrackType;
+ private Dynamic textTrackValue;
+ private ReadableArray textTracks;
+ private boolean disableFocus;
+ private boolean focusable = true;
+ private boolean disableBuffering;
+ private long contentStartTime = -1L;
+ private boolean disableDisconnectError;
+ private boolean preventsDisplaySleepDuringVideoPlayback = true;
+ private float mProgressUpdateInterval = 250.0f;
+ private boolean playInBackground = false;
+ private Map requestHeaders;
+ private boolean mReportBandwidth = false;
+ private UUID drmUUID = null;
+ private String drmLicenseUrl = null;
+ private String[] drmLicenseHeader = null;
+ private boolean controls;
+ // \ End props
+
+ // React
+ private final ThemedReactContext themedReactContext;
+ private final AudioManager audioManager;
+ private final AudioBecomingNoisyReceiver audioBecomingNoisyReceiver;
+
+ // store last progress event values to avoid sending unnecessary messages
+ private long lastPos = -1;
+ private long lastBufferDuration = -1;
+ private long lastDuration = -1;
+
+ private final Handler progressHandler = new Handler(Looper.getMainLooper()) {
+ @Override
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case SHOW_PROGRESS:
+ if (player != null) {
+ long pos = player.getCurrentPosition();
+ long bufferedDuration = player.getBufferedPercentage() * player.getDuration() / 100;
+ long duration = player.getDuration();
+
+ if (lastPos != pos
+ || lastBufferDuration != bufferedDuration
+ || lastDuration != duration) {
+ lastPos = pos;
+ lastBufferDuration = bufferedDuration;
+ lastDuration = duration;
+ eventEmitter.progressChanged(pos, bufferedDuration, player.getDuration(), getPositionInFirstPeriodMsForCurrentWindow(pos));
+ }
+ msg = obtainMessage(SHOW_PROGRESS);
+ sendMessageDelayed(msg, Math.round(mProgressUpdateInterval));
+ }
+ break;
+ }
+ }
+ };
+
+ public double getPositionInFirstPeriodMsForCurrentWindow(long currentPosition) {
+ Timeline.Window window = new Timeline.Window();
+ if(!player.getCurrentTimeline().isEmpty()) {
+ player.getCurrentTimeline().getWindow(player.getCurrentMediaItemIndex(), window);
+ }
+ return window.windowStartTimeMs + currentPosition;
+ }
+
+ public ReactExoplayerView(ThemedReactContext context, ReactExoplayerConfig config) {
+ super(context);
+ this.themedReactContext = context;
+ this.eventEmitter = new VideoEventEmitter(context);
+ this.config = config;
+ this.bandwidthMeter = config.getBandwidthMeter();
+
+ createViews();
+
+ audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
+ themedReactContext.addLifecycleEventListener(this);
+ audioBecomingNoisyReceiver = new AudioBecomingNoisyReceiver(themedReactContext);
+ }
+
+
+ @Override
+ public void setId(int id) {
+ super.setId(id);
+ eventEmitter.setViewId(id);
+ }
+
+ private void createViews() {
+ clearResumePosition();
+ mediaDataSourceFactory = buildDataSourceFactory(true);
+ if (CookieHandler.getDefault() != DEFAULT_COOKIE_MANAGER) {
+ CookieHandler.setDefault(DEFAULT_COOKIE_MANAGER);
+ }
+
+ LayoutParams layoutParams = new LayoutParams(
+ LayoutParams.MATCH_PARENT,
+ LayoutParams.MATCH_PARENT);
+ exoPlayerView = new ExoPlayerView(getContext());
+ exoPlayerView.setLayoutParams(layoutParams);
+
+ addView(exoPlayerView, 0, layoutParams);
+
+ exoPlayerView.setFocusable(this.focusable);
+
+ mainHandler = new Handler();
+ }
+
+ @Override
+ protected void onAttachedToWindow() {
+ super.onAttachedToWindow();
+ initializePlayer();
+ }
+
+ @Override
+ protected void onDetachedFromWindow() {
+ super.onDetachedFromWindow();
+ /* We want to be able to continue playing audio when switching tabs.
+ * Leave this here in case it causes issues.
+ */
+ // stopPlayback();
+ }
+
+ // LifecycleEventListener implementation
+
+ @Override
+ public void onHostResume() {
+ if (!playInBackground || !isInBackground) {
+ setPlayWhenReady(!isPaused);
+ }
+ isInBackground = false;
+ }
+
+ @Override
+ public void onHostPause() {
+ isInBackground = true;
+ if (playInBackground) {
+ return;
+ }
+ setPlayWhenReady(false);
+ }
+
+ @Override
+ public void onHostDestroy() {
+ stopPlayback();
+ }
+
+ public void cleanUpResources() {
+ stopPlayback();
+ }
+
+ //BandwidthMeter.EventListener implementation
+ @Override
+ public void onBandwidthSample(int elapsedMs, long bytes, long bitrate) {
+ if (mReportBandwidth) {
+ if (player == null) {
+ eventEmitter.bandwidthReport(bitrate, 0, 0, "-1");
+ } else {
+ Format videoFormat = player.getVideoFormat();
+ int width = videoFormat != null ? videoFormat.width : 0;
+ int height = videoFormat != null ? videoFormat.height : 0;
+ String trackId = videoFormat != null ? videoFormat.id : "-1";
+ eventEmitter.bandwidthReport(bitrate, height, width, trackId);
+ }
+ }
+ }
+
+ // Internal methods
+
+ /**
+ * Toggling the visibility of the player control view
+ */
+ private void togglePlayerControlVisibility() {
+ if(player == null) return;
+ reLayout(playerControlView);
+ if (playerControlView.isVisible()) {
+ playerControlView.hide();
+ } else {
+ playerControlView.show();
+ }
+ }
+
+ /**
+ * Initializing Player control
+ */
+ private void initializePlayerControl() {
+ if (playerControlView == null) {
+ playerControlView = new PlayerControlView(getContext());
+ }
+
+ // Setting the player for the playerControlView
+ playerControlView.setPlayer(player);
+ playPauseControlContainer = playerControlView.findViewById(R.id.exo_play_pause_container);
+
+ // Invoking onClick event for exoplayerView
+ exoPlayerView.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ togglePlayerControlVisibility();
+ }
+ });
+
+ //Handling the playButton click event
+ ImageButton playButton = playerControlView.findViewById(R.id.exo_play);
+ playButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (player != null && player.getPlaybackState() == Player.STATE_ENDED) {
+ player.seekTo(0);
+ }
+ setPausedModifier(false);
+ }
+ });
+
+ //Handling the pauseButton click event
+ ImageButton pauseButton = playerControlView.findViewById(R.id.exo_pause);
+ pauseButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ setPausedModifier(true);
+ }
+ });
+
+ //Handling the fullScreenButton click event
+ ImageButton fullScreenButton = playerControlView.findViewById(R.id.exo_fullscreen);
+ fullScreenButton.setOnClickListener(v -> setFullscreen(!isFullscreen));
+
+ // Invoking onPlaybackStateChanged and onPlayWhenReadyChanged events for Player
+ eventListener = new Player.Listener() {
+ @Override
+ public void onPlaybackStateChanged(int playbackState) {
+ View playButton = playerControlView.findViewById(R.id.exo_play);
+ View pauseButton = playerControlView.findViewById(R.id.exo_pause);
+ if (playButton != null && playButton.getVisibility() == GONE) {
+ playButton.setVisibility(INVISIBLE);
+ }
+ if (pauseButton != null && pauseButton.getVisibility() == GONE) {
+ pauseButton.setVisibility(INVISIBLE);
+ }
+
+ reLayout(playPauseControlContainer);
+ //Remove this eventListener once its executed. since UI will work fine once after the reLayout is done
+ player.removeListener(eventListener);
+ }
+
+ @Override
+ public void onPlayWhenReadyChanged(boolean playWhenReady, int reason) {
+ reLayout(playPauseControlContainer);
+ //Remove this eventListener once its executed. since UI will work fine once after the reLayout is done
+ player.removeListener(eventListener);
+ }
+ };
+ player.addListener(eventListener);
+ }
+
+ /**
+ * Adding Player control to the frame layout
+ */
+ private void addPlayerControl() {
+ if(player == null) return;
+ LayoutParams layoutParams = new LayoutParams(
+ LayoutParams.MATCH_PARENT,
+ LayoutParams.MATCH_PARENT);
+ playerControlView.setLayoutParams(layoutParams);
+ int indexOfPC = indexOfChild(playerControlView);
+ if (indexOfPC != -1) {
+ removeViewAt(indexOfPC);
+ }
+ addView(playerControlView, 1, layoutParams);
+ reLayout(playerControlView);
+ }
+
+ /**
+ * Update the layout
+ * @param view view needs to update layout
+ *
+ * This is a workaround for the open bug in react-native: https://github.com/facebook/react-native/issues/17968
+ */
+ private void reLayout(View view) {
+ if (view == null) return;
+ view.measure(MeasureSpec.makeMeasureSpec(getMeasuredWidth(), MeasureSpec.EXACTLY),
+ MeasureSpec.makeMeasureSpec(getMeasuredHeight(), MeasureSpec.EXACTLY));
+ view.layout(view.getLeft(), view.getTop(), view.getMeasuredWidth(), view.getMeasuredHeight());
+ }
+
+ private class RNVLoadControl extends DefaultLoadControl {
+ private int availableHeapInBytes = 0;
+ private Runtime runtime;
+ public RNVLoadControl(DefaultAllocator allocator, int minBufferMs, int maxBufferMs, int bufferForPlaybackMs, int bufferForPlaybackAfterRebufferMs, int targetBufferBytes, boolean prioritizeTimeOverSizeThresholds, int backBufferDurationMs, boolean retainBackBufferFromKeyframe) {
+ super(allocator,
+ minBufferMs,
+ maxBufferMs,
+ bufferForPlaybackMs,
+ bufferForPlaybackAfterRebufferMs,
+ targetBufferBytes,
+ prioritizeTimeOverSizeThresholds,
+ backBufferDurationMs,
+ retainBackBufferFromKeyframe);
+ runtime = Runtime.getRuntime();
+ ActivityManager activityManager = (ActivityManager) themedReactContext.getSystemService(themedReactContext.ACTIVITY_SERVICE);
+ availableHeapInBytes = (int) Math.floor(activityManager.getMemoryClass() * maxHeapAllocationPercent * 1024 * 1024);
+ }
+
+ @Override
+ public boolean shouldContinueLoading(long playbackPositionUs, long bufferedDurationUs, float playbackSpeed) {
+ if (ReactExoplayerView.this.disableBuffering) {
+ return false;
+ }
+ int loadedBytes = getAllocator().getTotalBytesAllocated();
+ boolean isHeapReached = availableHeapInBytes > 0 && loadedBytes >= availableHeapInBytes;
+ if (isHeapReached) {
+ return false;
+ }
+ long usedMemory = runtime.totalMemory() - runtime.freeMemory();
+ long freeMemory = runtime.maxMemory() - usedMemory;
+ long reserveMemory = (long)minBufferMemoryReservePercent * runtime.maxMemory();
+ long bufferedMs = bufferedDurationUs / (long)1000;
+ if (reserveMemory > freeMemory && bufferedMs > 2000) {
+ // We don't have enough memory in reserve so we stop buffering to allow other components to use it instead
+ return false;
+ }
+ if (runtime.freeMemory() == 0) {
+ Log.w("ExoPlayer Warning", "Free memory reached 0, forcing garbage collection");
+ runtime.gc();
+ return false;
+ }
+ return super.shouldContinueLoading(playbackPositionUs, bufferedDurationUs, playbackSpeed);
+ }
+ }
+
+ private void startBufferCheckTimer() {
+ Player player = this.player;
+ VideoEventEmitter eventEmitter = this.eventEmitter;
+ Handler mainHandler = this.mainHandler;
+
+ }
+
+ private void initializePlayer() {
+ ReactExoplayerView self = this;
+ Activity activity = themedReactContext.getCurrentActivity();
+ // This ensures all props have been settled, to avoid async racing conditions.
+ new Handler().postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ if (player == null) {
+ // Initialize core configuration and listeners
+ initializePlayerCore(self);
+ }
+ if (playerNeedsSource && srcUri != null) {
+ exoPlayerView.invalidateAspectRatio();
+ // DRM session manager creation must be done on a different thread to prevent crashes so we start a new thread
+ ExecutorService es = Executors.newSingleThreadExecutor();
+ es.execute(new Runnable() {
+ @Override
+ public void run() {
+ // DRM initialization must run on a different thread
+ DrmSessionManager drmSessionManager = initializePlayerDrm(self);
+ if (drmSessionManager == null && self.drmUUID != null) {
+ // Failed to intialize DRM session manager - cannot continue
+ Log.e("ExoPlayer Exception", "Failed to initialize DRM Session Manager Framework!");
+ eventEmitter.error("Failed to initialize DRM Session Manager Framework!", new Exception("DRM Session Manager Framework failure!"), "3003");
+ return;
+ }
+
+ // Initialize handler to run on the main thread
+ activity.runOnUiThread(new Runnable() {
+ public void run() {
+ try {
+ // Source initialization must run on the main thread
+ initializePlayerSource(self, drmSessionManager);
+ } catch (Exception ex) {
+ self.playerNeedsSource = true;
+ Log.e("ExoPlayer Exception", "Failed to initialize Player!");
+ Log.e("ExoPlayer Exception", ex.toString());
+ self.eventEmitter.error(ex.toString(), ex, "1001");
+ }
+ }
+ });
+ }
+ });
+ } else if (srcUri != null) {
+ initializePlayerSource(self, null);
+ }
+ } catch (Exception ex) {
+ self.playerNeedsSource = true;
+ Log.e("ExoPlayer Exception", "Failed to initialize Player!");
+ Log.e("ExoPlayer Exception", ex.toString());
+ eventEmitter.error(ex.toString(), ex, "1001");
+ }
+ }
+ }, 1);
+
+ }
+
+ private void initializePlayerCore(ReactExoplayerView self) {
+ ExoTrackSelection.Factory videoTrackSelectionFactory = new AdaptiveTrackSelection.Factory();
+ self.trackSelector = new DefaultTrackSelector(getContext(), videoTrackSelectionFactory);
+ self.trackSelector.setParameters(trackSelector.buildUponParameters()
+ .setMaxVideoBitrate(maxBitRate == 0 ? Integer.MAX_VALUE : maxBitRate));
+
+ DefaultAllocator allocator = new DefaultAllocator(true, C.DEFAULT_BUFFER_SEGMENT_SIZE);
+ RNVLoadControl loadControl = new RNVLoadControl(
+ allocator,
+ minBufferMs,
+ maxBufferMs,
+ bufferForPlaybackMs,
+ bufferForPlaybackAfterRebufferMs,
+ -1,
+ true,
+ backBufferDurationMs,
+ DefaultLoadControl.DEFAULT_RETAIN_BACK_BUFFER_FROM_KEYFRAME
+ );
+ DefaultRenderersFactory renderersFactory =
+ new DefaultRenderersFactory(getContext())
+ .setExtensionRendererMode(DefaultRenderersFactory.EXTENSION_RENDERER_MODE_OFF);
+ player = new ExoPlayer.Builder(getContext(), renderersFactory)
+ .setTrackSelector(self.trackSelector)
+ .setBandwidthMeter(bandwidthMeter)
+ .setLoadControl(loadControl)
+ .build();
+ player.addListener(self);
+ exoPlayerView.setPlayer(player);
+ audioBecomingNoisyReceiver.setListener(self);
+ bandwidthMeter.addEventListener(new Handler(), self);
+ setPlayWhenReady(!isPaused);
+ playerNeedsSource = true;
+
+ PlaybackParameters params = new PlaybackParameters(rate, 1f);
+ player.setPlaybackParameters(params);
+ }
+
+ private DrmSessionManager initializePlayerDrm(ReactExoplayerView self) {
+ DrmSessionManager drmSessionManager = null;
+ if (self.drmUUID != null) {
+ try {
+ drmSessionManager = self.buildDrmSessionManager(self.drmUUID, self.drmLicenseUrl,
+ self.drmLicenseHeader);
+ } catch (UnsupportedDrmException e) {
+ int errorStringId = Util.SDK_INT < 18 ? R.string.error_drm_not_supported
+ : (e.reason == UnsupportedDrmException.REASON_UNSUPPORTED_SCHEME
+ ? R.string.error_drm_unsupported_scheme : R.string.error_drm_unknown);
+ eventEmitter.error(getResources().getString(errorStringId), e, "3003");
+ return null;
+ }
+ }
+ return drmSessionManager;
+ }
+
+ private void initializePlayerSource(ReactExoplayerView self, DrmSessionManager drmSessionManager) {
+ ArrayList mediaSourceList = buildTextSources();
+ MediaSource videoSource = buildMediaSource(self.srcUri, self.extension, drmSessionManager);
+ MediaSource mediaSource;
+ if (mediaSourceList.size() == 0) {
+ mediaSource = videoSource;
+ } else {
+ mediaSourceList.add(0, videoSource);
+ MediaSource[] textSourceArray = mediaSourceList.toArray(
+ new MediaSource[mediaSourceList.size()]
+ );
+ mediaSource = new MergingMediaSource(textSourceArray);
+ }
+
+ // wait for player to be set
+ while (player == null) {
+ try {
+ wait();
+ } catch (InterruptedException ex) {
+ Thread.currentThread().interrupt();
+ Log.e("ExoPlayer Exception", ex.toString());
+ }
+ }
+
+ boolean haveResumePosition = resumeWindow != C.INDEX_UNSET;
+ if (haveResumePosition) {
+ player.seekTo(resumeWindow, resumePosition);
+ }
+ player.prepare(mediaSource, !haveResumePosition, false);
+ playerNeedsSource = false;
+
+ reLayout(exoPlayerView);
+ eventEmitter.loadStart();
+ loadVideoStarted = true;
+
+ finishPlayerInitialization();
+ }
+
+ private void finishPlayerInitialization() {
+ // Initializing the playerControlView
+ initializePlayerControl();
+ setControls(controls);
+ applyModifiers();
+ startBufferCheckTimer();
+ fullScreenPlayerView = new FullScreenPlayerView(getContext(), exoPlayerView, playerControlView, new OnBackPressedCallback(true) {
+ @Override
+ public void handleOnBackPressed() {
+ setFullscreen(false);
+ }
+ });
+ }
+
+ private DrmSessionManager buildDrmSessionManager(UUID uuid, String licenseUrl, String[] keyRequestPropertiesArray) throws UnsupportedDrmException {
+ return buildDrmSessionManager(uuid, licenseUrl, keyRequestPropertiesArray, 0);
+ }
+
+ private DrmSessionManager buildDrmSessionManager(UUID uuid, String licenseUrl, String[] keyRequestPropertiesArray, int retryCount) throws UnsupportedDrmException {
+ if (Util.SDK_INT < 18) {
+ return null;
+ }
+ try {
+ HttpMediaDrmCallback drmCallback = new HttpMediaDrmCallback(licenseUrl,
+ buildHttpDataSourceFactory(false));
+ if (keyRequestPropertiesArray != null) {
+ for (int i = 0; i < keyRequestPropertiesArray.length - 1; i += 2) {
+ drmCallback.setKeyRequestProperty(keyRequestPropertiesArray[i], keyRequestPropertiesArray[i + 1]);
+ }
+ }
+ FrameworkMediaDrm mediaDrm = FrameworkMediaDrm.newInstance(uuid);
+ if (hasDrmFailed) {
+ // When DRM fails using L1 we want to switch to L3
+ mediaDrm.setPropertyString("securityLevel", "L3");
+ }
+ return new DefaultDrmSessionManager(uuid, mediaDrm, drmCallback, null, false, 3);
+ } catch(UnsupportedDrmException ex) {
+ // Unsupported DRM exceptions are handled by the calling method
+ throw ex;
+ } catch (Exception ex) {
+ if (retryCount < 3) {
+ // Attempt retry 3 times in case where the OS Media DRM Framework fails for whatever reason
+ return buildDrmSessionManager(uuid, licenseUrl, keyRequestPropertiesArray, ++retryCount);
+ }
+ // Handle the unknow exception and emit to JS
+ eventEmitter.error(ex.toString(), ex, "3006");
+ return null;
+ }
+ }
+
+ private MediaSource buildMediaSource(Uri uri, String overrideExtension, DrmSessionManager drmSessionManager) {
+ if (uri == null) {
+ throw new IllegalStateException("Invalid video uri");
+ }
+ int type = Util.inferContentType(!TextUtils.isEmpty(overrideExtension) ? "." + overrideExtension
+ : uri.getLastPathSegment());
+ config.setDisableDisconnectError(this.disableDisconnectError);
+ MediaItem mediaItem = new MediaItem.Builder().setUri(uri).build();
+ DrmSessionManagerProvider drmProvider = null;
+ if (drmSessionManager != null) {
+ drmProvider = new DrmSessionManagerProvider() {
+ @Override
+ public DrmSessionManager get(MediaItem mediaItem) {
+ return drmSessionManager;
+ }
+ };
+ } else {
+ drmProvider = new DefaultDrmSessionManagerProvider();
+ }
+ switch (type) {
+ case C.TYPE_SS:
+ return new SsMediaSource.Factory(
+ new DefaultSsChunkSource.Factory(mediaDataSourceFactory),
+ buildDataSourceFactory(false)
+ ).setDrmSessionManagerProvider(drmProvider)
+ .setLoadErrorHandlingPolicy(
+ config.buildLoadErrorHandlingPolicy(minLoadRetryCount)
+ ).createMediaSource(mediaItem);
+ case C.TYPE_DASH:
+ return new DashMediaSource.Factory(
+ new DefaultDashChunkSource.Factory(mediaDataSourceFactory),
+ buildDataSourceFactory(false)
+ ).setDrmSessionManagerProvider(drmProvider)
+ .setLoadErrorHandlingPolicy(
+ config.buildLoadErrorHandlingPolicy(minLoadRetryCount)
+ ).createMediaSource(mediaItem);
+ case C.TYPE_HLS:
+ return new HlsMediaSource.Factory(
+ mediaDataSourceFactory
+ ).setDrmSessionManagerProvider(drmProvider)
+ .setLoadErrorHandlingPolicy(
+ config.buildLoadErrorHandlingPolicy(minLoadRetryCount)
+ ).createMediaSource(mediaItem);
+ case C.TYPE_OTHER:
+ return new ProgressiveMediaSource.Factory(
+ mediaDataSourceFactory
+ ).setDrmSessionManagerProvider(drmProvider)
+ .setLoadErrorHandlingPolicy(
+ config.buildLoadErrorHandlingPolicy(minLoadRetryCount)
+ ).createMediaSource(mediaItem);
+ default: {
+ throw new IllegalStateException("Unsupported type: " + type);
+ }
+ }
+ }
+
+ private ArrayList buildTextSources() {
+ ArrayList textSources = new ArrayList<>();
+ if (textTracks == null) {
+ return textSources;
+ }
+
+ for (int i = 0; i < textTracks.size(); ++i) {
+ ReadableMap textTrack = textTracks.getMap(i);
+ String language = textTrack.getString("language");
+ String title = textTrack.hasKey("title")
+ ? textTrack.getString("title") : language + " " + i;
+ Uri uri = Uri.parse(textTrack.getString("uri"));
+ MediaSource textSource = buildTextSource(title, uri, textTrack.getString("type"),
+ language);
+ if (textSource != null) {
+ textSources.add(textSource);
+ }
+ }
+ return textSources;
+ }
+
+ private MediaSource buildTextSource(String title, Uri uri, String mimeType, String language) {
+ MediaItem.SubtitleConfiguration subtitleConfiguration = new MediaItem.SubtitleConfiguration.Builder(uri)
+ .setMimeType(mimeType)
+ .setLanguage(language)
+ .setSelectionFlags(C.SELECTION_FLAG_DEFAULT)
+ .setRoleFlags(C.ROLE_FLAG_SUBTITLE)
+ .setLabel(title)
+ .build();
+ return new SingleSampleMediaSource.Factory(mediaDataSourceFactory)
+ .createMediaSource(subtitleConfiguration, C.TIME_UNSET);
+ }
+
+ private void releasePlayer() {
+ if (player != null) {
+ updateResumePosition();
+ player.release();
+ player.removeListener(this);
+ trackSelector = null;
+ player = null;
+ }
+ progressHandler.removeMessages(SHOW_PROGRESS);
+ themedReactContext.removeLifecycleEventListener(this);
+ audioBecomingNoisyReceiver.removeListener();
+ bandwidthMeter.removeEventListener(this);
+ }
+
+ private boolean requestAudioFocus() {
+ if (disableFocus || srcUri == null || this.hasAudioFocus) {
+ return true;
+ }
+ int result = audioManager.requestAudioFocus(this,
+ AudioManager.STREAM_MUSIC,
+ AudioManager.AUDIOFOCUS_GAIN);
+ return result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED;
+ }
+
+ private void setPlayWhenReady(boolean playWhenReady) {
+ if (player == null) {
+ return;
+ }
+
+ if (playWhenReady) {
+ this.hasAudioFocus = requestAudioFocus();
+ if (this.hasAudioFocus) {
+ player.setPlayWhenReady(true);
+ }
+ } else {
+ // ensure playback is not ENDED, else it will trigger another ended event
+ if (player.getPlaybackState() != Player.STATE_ENDED) {
+ player.setPlayWhenReady(false);
+ }
+ }
+ }
+
+ private void startPlayback() {
+ if (player != null) {
+ switch (player.getPlaybackState()) {
+ case Player.STATE_IDLE:
+ case Player.STATE_ENDED:
+ initializePlayer();
+ break;
+ case Player.STATE_BUFFERING:
+ case Player.STATE_READY:
+ if (!player.getPlayWhenReady()) {
+ setPlayWhenReady(true);
+ }
+ break;
+ default:
+ break;
+ }
+ } else {
+ initializePlayer();
+ }
+ if (!disableFocus) {
+ setKeepScreenOn(preventsDisplaySleepDuringVideoPlayback);
+ }
+ }
+
+ private void pausePlayback() {
+ if (player != null) {
+ if (player.getPlayWhenReady()) {
+ setPlayWhenReady(false);
+ }
+ }
+ setKeepScreenOn(false);
+ }
+
+ private void stopPlayback() {
+ onStopPlayback();
+ releasePlayer();
+ }
+
+ private void onStopPlayback() {
+ if (isFullscreen) {
+ setFullscreen(false);
+ }
+ audioManager.abandonAudioFocus(this);
+ }
+
+ private void updateResumePosition() {
+ resumeWindow = player.getCurrentMediaItemIndex();
+ resumePosition = player.isCurrentMediaItemSeekable() ? Math.max(0, player.getCurrentPosition())
+ : C.TIME_UNSET;
+ }
+
+ private void clearResumePosition() {
+ resumeWindow = C.INDEX_UNSET;
+ resumePosition = C.TIME_UNSET;
+ }
+
+ /**
+ * Returns a new DataSource factory.
+ *
+ * @param useBandwidthMeter Whether to set {@link #bandwidthMeter} as a listener to the new
+ * DataSource factory.
+ * @return A new DataSource factory.
+ */
+ private DataSource.Factory buildDataSourceFactory(boolean useBandwidthMeter) {
+ return DataSourceUtil.getDefaultDataSourceFactory(this.themedReactContext,
+ useBandwidthMeter ? bandwidthMeter : null, requestHeaders);
+ }
+
+ /**
+ * Returns a new HttpDataSource factory.
+ *
+ * @param useBandwidthMeter Whether to set {@link #bandwidthMeter} as a listener to the new
+ * DataSource factory.
+ * @return A new HttpDataSource factory.
+ */
+ private HttpDataSource.Factory buildHttpDataSourceFactory(boolean useBandwidthMeter) {
+ return DataSourceUtil.getDefaultHttpDataSourceFactory(this.themedReactContext, useBandwidthMeter ? bandwidthMeter : null, requestHeaders);
+ }
+
+
+ // AudioManager.OnAudioFocusChangeListener implementation
+
+ @Override
+ public void onAudioFocusChange(int focusChange) {
+ switch (focusChange) {
+ case AudioManager.AUDIOFOCUS_LOSS:
+ this.hasAudioFocus = false;
+ eventEmitter.audioFocusChanged(false);
+ pausePlayback();
+ audioManager.abandonAudioFocus(this);
+ break;
+ case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
+ eventEmitter.audioFocusChanged(false);
+ break;
+ case AudioManager.AUDIOFOCUS_GAIN:
+ this.hasAudioFocus = true;
+ eventEmitter.audioFocusChanged(true);
+ break;
+ default:
+ break;
+ }
+
+ if (player != null) {
+ if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK) {
+ // Lower the volume
+ if (!muted) {
+ player.setVolume(audioVolume * 0.8f);
+ }
+ } else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {
+ // Raise it back to normal
+ if (!muted) {
+ player.setVolume(audioVolume * 1);
+ }
+ }
+ }
+ }
+
+ // AudioBecomingNoisyListener implementation
+
+ @Override
+ public void onAudioBecomingNoisy() {
+ eventEmitter.audioBecomingNoisy();
+ }
+
+ // Player.Listener implementation
+
+ @Override
+ public void onIsLoadingChanged(boolean isLoading) {
+ // Do nothing.
+ }
+
+ @Override
+ public void onEvents(Player player, Player.Events events) {
+ if (events.contains(Player.EVENT_PLAYBACK_STATE_CHANGED) || events.contains(Player.EVENT_PLAY_WHEN_READY_CHANGED)) {
+ int playbackState = player.getPlaybackState();
+ boolean playWhenReady = player.getPlayWhenReady();
+ String text = "onStateChanged: playWhenReady=" + playWhenReady + ", playbackState=";
+ eventEmitter.playbackRateChange(playWhenReady && playbackState == ExoPlayer.STATE_READY ? 1.0f : 0.0f);
+ switch (playbackState) {
+ case Player.STATE_IDLE:
+ text += "idle";
+ eventEmitter.idle();
+ clearProgressMessageHandler();
+ if (!player.getPlayWhenReady()) {
+ setKeepScreenOn(false);
+ }
+ break;
+ case Player.STATE_BUFFERING:
+ text += "buffering";
+ onBuffering(true);
+ clearProgressMessageHandler();
+ setKeepScreenOn(preventsDisplaySleepDuringVideoPlayback);
+ break;
+ case Player.STATE_READY:
+ text += "ready";
+ eventEmitter.ready();
+ onBuffering(false);
+ startProgressHandler();
+ videoLoaded();
+ if (selectTrackWhenReady && isUsingContentResolution) {
+ selectTrackWhenReady = false;
+ setSelectedTrack(C.TRACK_TYPE_VIDEO, videoTrackType, videoTrackValue);
+ }
+ // Setting the visibility for the playerControlView
+ if (playerControlView != null) {
+ playerControlView.show();
+ }
+ setKeepScreenOn(preventsDisplaySleepDuringVideoPlayback);
+ break;
+ case Player.STATE_ENDED:
+ text += "ended";
+ eventEmitter.end();
+ onStopPlayback();
+ setKeepScreenOn(false);
+ break;
+ default:
+ text += "unknown";
+ break;
+ }
+ }
+ }
+
+ private void startProgressHandler() {
+ progressHandler.sendEmptyMessage(SHOW_PROGRESS);
+ }
+
+ /*
+ The progress message handler will duplicate recursions of the onProgressMessage handler
+ on change of player state from any state to STATE_READY with playWhenReady is true (when
+ the video is not paused). This clears all existing messages.
+ */
+ private void clearProgressMessageHandler() {
+ progressHandler.removeMessages(SHOW_PROGRESS);
+ }
+
+ private void videoLoaded() {
+ if (loadVideoStarted) {
+ loadVideoStarted = false;
+ if (audioTrackType != null) {
+ setSelectedAudioTrack(audioTrackType, audioTrackValue);
+ }
+ if (videoTrackType != null) {
+ setSelectedVideoTrack(videoTrackType, videoTrackValue);
+ }
+ if (textTrackType != null) {
+ setSelectedTextTrack(textTrackType, textTrackValue);
+ }
+ Format videoFormat = player.getVideoFormat();
+ int width = videoFormat != null ? videoFormat.width : 0;
+ int height = videoFormat != null ? videoFormat.height : 0;
+ String trackId = videoFormat != null ? videoFormat.id : "-1";
+
+ // Properties that must be accessed on the main thread
+ long duration = player.getDuration();
+ long currentPosition = player.getCurrentPosition();
+ WritableArray audioTrackInfo = getAudioTrackInfo();
+ WritableArray textTrackInfo = getTextTrackInfo();
+ int trackRendererIndex = getTrackRendererIndex(C.TRACK_TYPE_VIDEO);
+
+ ExecutorService es = Executors.newSingleThreadExecutor();
+ es.execute(new Runnable() {
+ @Override
+ public void run() {
+ // To prevent ANRs caused by getVideoTrackInfo we run this on a different thread and notify the player only when we're done
+ eventEmitter.load(duration, currentPosition, width, height,
+ audioTrackInfo, textTrackInfo, getVideoTrackInfo(trackRendererIndex), trackId);
+ }
+ });
+ }
+ }
+
+ private WritableArray getAudioTrackInfo() {
+ WritableArray audioTracks = Arguments.createArray();
+
+ if (trackSelector == null) {
+ // Likely player is unmounting so no audio tracks are available anymore
+ return audioTracks;
+ }
+
+ MappingTrackSelector.MappedTrackInfo info = trackSelector.getCurrentMappedTrackInfo();
+ int index = getTrackRendererIndex(C.TRACK_TYPE_AUDIO);
+ if (info == null || index == C.INDEX_UNSET) {
+ return audioTracks;
+ }
+
+ TrackGroupArray groups = info.getTrackGroups(index);
+ for (int i = 0; i < groups.length; ++i) {
+ Format format = groups.get(i).getFormat(0);
+ WritableMap audioTrack = Arguments.createMap();
+ audioTrack.putInt("index", i);
+ audioTrack.putString("title", format.id != null ? format.id : "");
+ audioTrack.putString("type", format.sampleMimeType);
+ audioTrack.putString("language", format.language != null ? format.language : "");
+ audioTrack.putString("bitrate", format.bitrate == Format.NO_VALUE ? ""
+ : String.format(Locale.US, "%.2fMbps", format.bitrate / 1000000f));
+ audioTracks.pushMap(audioTrack);
+ }
+ return audioTracks;
+ }
+ private WritableArray getVideoTrackInfo(int trackRendererIndex) {
+
+ if (this.contentStartTime != -1L) {
+ WritableArray contentVideoTracks = this.getVideoTrackInfoFromManifest();
+ if (contentVideoTracks != null) {
+ isUsingContentResolution = true;
+ return contentVideoTracks;
+ }
+ }
+
+ WritableArray videoTracks = Arguments.createArray();
+
+ MappingTrackSelector.MappedTrackInfo info = trackSelector.getCurrentMappedTrackInfo();
+
+ if (info == null || trackRendererIndex == C.INDEX_UNSET) {
+ return videoTracks;
+ }
+
+ TrackGroupArray groups = info.getTrackGroups(trackRendererIndex);
+ for (int i = 0; i < groups.length; ++i) {
+ TrackGroup group = groups.get(i);
+
+ for (int trackIndex = 0; trackIndex < group.length; trackIndex++) {
+ Format format = group.getFormat(trackIndex);
+ if (isFormatSupported(format)) {
+ WritableMap videoTrack = Arguments.createMap();
+ videoTrack.putInt("width", format.width == Format.NO_VALUE ? 0 : format.width);
+ videoTrack.putInt("height",format.height == Format.NO_VALUE ? 0 : format.height);
+ videoTrack.putInt("bitrate", format.bitrate == Format.NO_VALUE ? 0 : format.bitrate);
+ videoTrack.putString("codecs", format.codecs != null ? format.codecs : "");
+ videoTrack.putString("trackId", format.id == null ? String.valueOf(trackIndex) : format.id);
+ videoTracks.pushMap(videoTrack);
+ }
+ }
+ }
+
+ return videoTracks;
+ }
+
+ private WritableArray getVideoTrackInfoFromManifest() {
+ return this.getVideoTrackInfoFromManifest(0);
+ }
+
+ // We need retry count to in case where minefest request fails from poor network conditions
+ private WritableArray getVideoTrackInfoFromManifest(int retryCount) {
+ ExecutorService es = Executors.newSingleThreadExecutor();
+ final DataSource dataSource = this.mediaDataSourceFactory.createDataSource();
+ final Uri sourceUri = this.srcUri;
+ final long startTime = this.contentStartTime * 1000 - 100; // s -> ms with 100ms offset
+
+ Future result = es.submit(new Callable() {
+ DataSource ds = dataSource;
+ Uri uri = sourceUri;
+ long startTimeUs = startTime * 1000; // ms -> us
+
+ public WritableArray call() throws Exception {
+ WritableArray videoTracks = Arguments.createArray();
+ try {
+ DashManifest manifest = DashUtil.loadManifest(this.ds, this.uri);
+ int periodCount = manifest.getPeriodCount();
+ for (int i = 0; i < periodCount; i++) {
+ Period period = manifest.getPeriod(i);
+ for (int adaptationIndex = 0; adaptationIndex < period.adaptationSets.size(); adaptationIndex++) {
+ AdaptationSet adaptation = period.adaptationSets.get(adaptationIndex);
+ if (adaptation.type != C.TRACK_TYPE_VIDEO) {
+ continue;
+ }
+ boolean hasFoundContentPeriod = false;
+ for (int representationIndex = 0; representationIndex < adaptation.representations.size(); representationIndex++) {
+ Representation representation = adaptation.representations.get(representationIndex);
+ Format format = representation.format;
+ if (representation.presentationTimeOffsetUs <= startTimeUs) {
+ break;
+ }
+ hasFoundContentPeriod = true;
+ WritableMap videoTrack = Arguments.createMap();
+ videoTrack.putInt("width", format.width == Format.NO_VALUE ? 0 : format.width);
+ videoTrack.putInt("height",format.height == Format.NO_VALUE ? 0 : format.height);
+ videoTrack.putInt("bitrate", format.bitrate == Format.NO_VALUE ? 0 : format.bitrate);
+ videoTrack.putString("codecs", format.codecs != null ? format.codecs : "");
+ videoTrack.putString("trackId",
+ format.id == null ? String.valueOf(representationIndex) : format.id);
+ if (isFormatSupported(format)) {
+ videoTracks.pushMap(videoTrack);
+ }
+ }
+ if (hasFoundContentPeriod) {
+ return videoTracks;
+ }
+ }
+ }
+ } catch (Exception e) {}
+ return null;
+ }
+ });
+
+ try {
+ WritableArray results = result.get(3000, TimeUnit.MILLISECONDS);
+ if (results == null && retryCount < 1) {
+ return this.getVideoTrackInfoFromManifest(++retryCount);
+ }
+ es.shutdown();
+ return results;
+ } catch (Exception e) {}
+
+ return null;
+ }
+
+ private WritableArray getTextTrackInfo() {
+ WritableArray textTracks = Arguments.createArray();
+
+ MappingTrackSelector.MappedTrackInfo info = trackSelector.getCurrentMappedTrackInfo();
+ int index = getTrackRendererIndex(C.TRACK_TYPE_TEXT);
+ if (info == null || index == C.INDEX_UNSET) {
+ return textTracks;
+ }
+
+ TrackGroupArray groups = info.getTrackGroups(index);
+ for (int i = 0; i < groups.length; ++i) {
+ Format format = groups.get(i).getFormat(0);
+ WritableMap textTrack = Arguments.createMap();
+ textTrack.putInt("index", i);
+ textTrack.putString("title", format.id != null ? format.id : "");
+ textTrack.putString("type", format.sampleMimeType);
+ textTrack.putString("language", format.language != null ? format.language : "");
+ textTracks.pushMap(textTrack);
+ }
+ return textTracks;
+ }
+
+ private void onBuffering(boolean buffering) {
+ if (isBuffering == buffering) {
+ return;
+ }
+
+ isBuffering = buffering;
+ if (buffering) {
+ eventEmitter.buffering(true);
+ } else {
+ eventEmitter.buffering(false);
+ }
+ }
+
+ @Override
+ public void onPositionDiscontinuity(Player.PositionInfo oldPosition, Player.PositionInfo newPosition, int reason) {
+ if (playerNeedsSource) {
+ // This will only occur if the user has performed a seek whilst in the error state. Update the
+ // resume position so that if the user then retries, playback will resume from the position to
+ // which they seeked.
+ updateResumePosition();
+ }
+ if (isUsingContentResolution) {
+ // Discontinuity events might have a different track list so we update the selected track
+ setSelectedTrack(C.TRACK_TYPE_VIDEO, videoTrackType, videoTrackValue);
+ selectTrackWhenReady = true;
+ }
+ // When repeat is turned on, reaching the end of the video will not cause a state change
+ // so we need to explicitly detect it.
+ if (reason == Player.DISCONTINUITY_REASON_AUTO_TRANSITION
+ && player.getRepeatMode() == Player.REPEAT_MODE_ONE) {
+ eventEmitter.end();
+ }
+
+ }
+
+ @Override
+ public void onTimelineChanged(Timeline timeline, int reason) {
+ // Do nothing.
+ }
+
+ @Override
+ public void onPlaybackStateChanged(int playbackState) {
+ if (playbackState == Player.STATE_READY && seekTime != C.TIME_UNSET) {
+ eventEmitter.seek(player.getCurrentPosition(), seekTime);
+ seekTime = C.TIME_UNSET;
+ if (isUsingContentResolution) {
+ // We need to update the selected track to make sure that it still matches user selection if track list has changed in this period
+ setSelectedTrack(C.TRACK_TYPE_VIDEO, videoTrackType, videoTrackValue);
+ }
+ }
+ }
+
+ @Override
+ public void onShuffleModeEnabledChanged(boolean shuffleModeEnabled) {
+ // Do nothing.
+ }
+
+ @Override
+ public void onRepeatModeChanged(int repeatMode) {
+ // Do nothing.
+ }
+
+ @Override
+ public void onTracksChanged(Tracks tracks) {
+ // Do nothing.
+ }
+
+ @Override
+ public void onPlaybackParametersChanged(PlaybackParameters params) {
+ eventEmitter.playbackRateChange(params.speed);
+ }
+
+ @Override
+ public void onIsPlayingChanged(boolean isPlaying) {
+ eventEmitter.playbackStateChanged(isPlaying);
+ }
+
+ @Override
+ public void onPlayerError(PlaybackException e) {
+ if (e == null) {
+ return;
+ }
+ String errorString = "ExoPlaybackException: " + PlaybackException.getErrorCodeName(e.errorCode);
+ String errorCode = "2" + String.valueOf(e.errorCode);
+ boolean needsReInitialization = false;
+ switch(e.errorCode) {
+ case PlaybackException.ERROR_CODE_DRM_DEVICE_REVOKED:
+ case PlaybackException.ERROR_CODE_DRM_LICENSE_ACQUISITION_FAILED:
+ case PlaybackException.ERROR_CODE_DRM_PROVISIONING_FAILED:
+ case PlaybackException.ERROR_CODE_DRM_SYSTEM_ERROR:
+ case PlaybackException.ERROR_CODE_DRM_UNSPECIFIED:
+ if (!hasDrmFailed) {
+ // When DRM fails to reach the app level certificate server it will fail with a source error so we assume that it is DRM related and try one more time
+ hasDrmFailed = true;
+ playerNeedsSource = true;
+ updateResumePosition();
+ initializePlayer();
+ setPlayWhenReady(true);
+ return;
+ }
+ break;
+ default:
+ break;
+ }
+ eventEmitter.error(errorString, e, errorCode);
+ playerNeedsSource = true;
+ if (isBehindLiveWindow(e)) {
+ clearResumePosition();
+ initializePlayer();
+ } else {
+ updateResumePosition();
+ if (needsReInitialization) {
+ initializePlayer();
+ }
+ }
+ }
+
+ private static boolean isBehindLiveWindow(PlaybackException e) {
+ return e.errorCode == PlaybackException.ERROR_CODE_BEHIND_LIVE_WINDOW;
+ }
+
+ public int getTrackRendererIndex(int trackType) {
+ if (player != null) {
+ int rendererCount = player.getRendererCount();
+ for (int rendererIndex = 0; rendererIndex < rendererCount; rendererIndex++) {
+ if (player.getRendererType(rendererIndex) == trackType) {
+ return rendererIndex;
+ }
+ }
+ }
+ return C.INDEX_UNSET;
+ }
+
+ @Override
+ public void onMetadata(Metadata metadata) {
+ eventEmitter.timedMetadata(metadata);
+ }
+
+ // ReactExoplayerViewManager public api
+
+ public void setSrc(final Uri uri, final String extension, Map headers) {
+ if (uri != null) {
+ boolean isSourceEqual = uri.equals(srcUri);
+ hasDrmFailed = false;
+ this.srcUri = uri;
+ this.extension = extension;
+ this.requestHeaders = headers;
+ this.mediaDataSourceFactory =
+ DataSourceUtil.getDefaultDataSourceFactory(this.themedReactContext, bandwidthMeter,
+ this.requestHeaders);
+
+ if (!isSourceEqual) {
+ reloadSource();
+ }
+ }
+ }
+
+ public void clearSrc() {
+ if (srcUri != null) {
+ player.stop();
+ player.clearMediaItems();
+ this.srcUri = null;
+ this.extension = null;
+ this.requestHeaders = null;
+ this.mediaDataSourceFactory = null;
+ clearResumePosition();
+ }
+ }
+
+ public void setProgressUpdateInterval(final float progressUpdateInterval) {
+ mProgressUpdateInterval = progressUpdateInterval;
+ }
+
+ public void setReportBandwidth(boolean reportBandwidth) {
+ mReportBandwidth = reportBandwidth;
+ }
+
+ public void setRawSrc(final Uri uri, final String extension) {
+ if (uri != null) {
+ boolean isSourceEqual = uri.equals(srcUri);
+ this.srcUri = uri;
+ this.extension = extension;
+ this.mediaDataSourceFactory = buildDataSourceFactory(true);
+
+ if (!isSourceEqual) {
+ reloadSource();
+ }
+ }
+ }
+
+ public void setTextTracks(ReadableArray textTracks) {
+ this.textTracks = textTracks;
+ reloadSource();
+ }
+
+ private void reloadSource() {
+ playerNeedsSource = true;
+ initializePlayer();
+ }
+
+ public void setResizeModeModifier(@ResizeMode.Mode int resizeMode) {
+ exoPlayerView.setResizeMode(resizeMode);
+ }
+
+ private void applyModifiers() {
+ setRepeatModifier(repeat);
+ setMutedModifier(muted);
+ }
+
+ public void setRepeatModifier(boolean repeat) {
+ if (player != null) {
+ if (repeat) {
+ player.setRepeatMode(Player.REPEAT_MODE_ONE);
+ } else {
+ player.setRepeatMode(Player.REPEAT_MODE_OFF);
+ }
+ }
+ this.repeat = repeat;
+ }
+
+ public void setPreventsDisplaySleepDuringVideoPlayback(boolean preventsDisplaySleepDuringVideoPlayback) {
+ this.preventsDisplaySleepDuringVideoPlayback = preventsDisplaySleepDuringVideoPlayback;
+ }
+
+ public void setSelectedTrack(int trackType, String type, Dynamic value) {
+ if (player == null) return;
+ int rendererIndex = getTrackRendererIndex(trackType);
+ if (rendererIndex == C.INDEX_UNSET) {
+ return;
+ }
+ MappingTrackSelector.MappedTrackInfo info = trackSelector.getCurrentMappedTrackInfo();
+ if (info == null) {
+ return;
+ }
+
+ TrackGroupArray groups = info.getTrackGroups(rendererIndex);
+ int groupIndex = C.INDEX_UNSET;
+ List tracks = new ArrayList<>();
+ tracks.add(0);
+
+ if (TextUtils.isEmpty(type)) {
+ type = "default";
+ }
+
+ DefaultTrackSelector.Parameters disableParameters = trackSelector.getParameters()
+ .buildUpon()
+ .setRendererDisabled(rendererIndex, true)
+ .build();
+
+ if (type.equals("disabled")) {
+ trackSelector.setParameters(disableParameters);
+ return;
+ } else if (type.equals("language")) {
+ for (int i = 0; i < groups.length; ++i) {
+ Format format = groups.get(i).getFormat(0);
+ if (format.language != null && format.language.equals(value.asString())) {
+ groupIndex = i;
+ break;
+ }
+ }
+ } else if (type.equals("title")) {
+ for (int i = 0; i < groups.length; ++i) {
+ Format format = groups.get(i).getFormat(0);
+ if (format.id != null && format.id.equals(value.asString())) {
+ groupIndex = i;
+ break;
+ }
+ }
+ } else if (type.equals("index")) {
+ if (value.asInt() < groups.length) {
+ groupIndex = value.asInt();
+ }
+ } else if (type.equals("resolution")) {
+ int height = value.asInt();
+ for (int i = 0; i < groups.length; ++i) { // Search for the exact height
+ TrackGroup group = groups.get(i);
+ Format closestFormat = null;
+ int closestTrackIndex = -1;
+ boolean usingExactMatch = false;
+ for (int j = 0; j < group.length; j++) {
+ Format format = group.getFormat(j);
+ if (format.height == height) {
+ groupIndex = i;
+ tracks.set(0, j);
+ closestFormat = null;
+ closestTrackIndex = -1;
+ usingExactMatch = true;
+ break;
+ } else if (isUsingContentResolution) {
+ // When using content resolution rather than ads, we need to try and find the closest match if there is no exact match
+ if (closestFormat != null) {
+ if ((format.bitrate > closestFormat.bitrate || format.height > closestFormat.height) && format.height < height) {
+ // Higher quality match
+ closestFormat = format;
+ closestTrackIndex = j;
+ }
+ } else if(format.height < height) {
+ closestFormat = format;
+ closestTrackIndex = j;
+ }
+ }
+ }
+ // This is a fallback if the new period contains only higher resolutions than the user has selected
+ if (closestFormat == null && isUsingContentResolution && !usingExactMatch) {
+ // No close match found - so we pick the lowest quality
+ int minHeight = Integer.MAX_VALUE;
+ for (int j = 0; j < group.length; j++) {
+ Format format = group.getFormat(j);
+ if (format.height < minHeight) {
+ minHeight = format.height;
+ groupIndex = i;
+ tracks.set(0, j);
+ }
+ }
+ }
+ // Selecting the closest match found
+ if (closestFormat != null && closestTrackIndex != -1) {
+ // We found the closest match instead of an exact one
+ groupIndex = i;
+ tracks.set(0, closestTrackIndex);
+ }
+ }
+ } else if (trackType == C.TRACK_TYPE_TEXT && Util.SDK_INT > 18) { // Text default
+ // Use system settings if possible
+ CaptioningManager captioningManager
+ = (CaptioningManager)themedReactContext.getSystemService(Context.CAPTIONING_SERVICE);
+ if (captioningManager != null && captioningManager.isEnabled()) {
+ groupIndex = getGroupIndexForDefaultLocale(groups);
+ }
+ } else if (rendererIndex == C.TRACK_TYPE_AUDIO) { // Audio default
+ groupIndex = getGroupIndexForDefaultLocale(groups);
+ }
+
+ if (groupIndex == C.INDEX_UNSET && trackType == C.TRACK_TYPE_VIDEO && groups.length != 0) { // Video auto
+ // Add all tracks as valid options for ABR to choose from
+ TrackGroup group = groups.get(0);
+ tracks = new ArrayList(group.length);
+ ArrayList allTracks = new ArrayList(group.length);
+ groupIndex = 0;
+ for (int j = 0; j < group.length; j++) {
+ allTracks.add(j);
+ }
+
+ // Valiate list of all tracks and add only supported formats
+ int supportedFormatLength = 0;
+ ArrayList supportedTrackList = new ArrayList();
+ for (int g = 0; g < allTracks.size(); g++) {
+ Format format = group.getFormat(g);
+ if (isFormatSupported(format)) {
+ supportedFormatLength++;
+ }
+ }
+ if (allTracks.size() == 1) {
+ // With only one tracks we can't remove any tracks so attempt to play it anyway
+ tracks = allTracks;
+ } else {
+ tracks = new ArrayList<>(supportedFormatLength + 1);
+ for (int k = 0; k < allTracks.size(); k++) {
+ Format format = group.getFormat(k);
+ if (isFormatSupported(format)) {
+ tracks.add(allTracks.get(k));
+ supportedTrackList.add(allTracks.get(k));
+ }
+ }
+ }
+ }
+
+ if (groupIndex == C.INDEX_UNSET) {
+ trackSelector.setParameters(disableParameters);
+ return;
+ }
+
+ TrackSelectionOverride selectionOverride = new TrackSelectionOverride(groups.get(groupIndex), tracks);
+
+ DefaultTrackSelector.Parameters selectionParameters = trackSelector.getParameters()
+ .buildUpon()
+ .setRendererDisabled(rendererIndex, false)
+ .addOverride(selectionOverride)
+ .build();
+ trackSelector.setParameters(selectionParameters);
+ }
+
+ private boolean isFormatSupported(Format format) {
+ int width = format.width == Format.NO_VALUE ? 0 : format.width;
+ int height = format.height == Format.NO_VALUE ? 0 : format.height;
+ float frameRate = format.frameRate == Format.NO_VALUE ? 0 : format.frameRate;
+ String mimeType = format.sampleMimeType;
+ if (mimeType == null) {
+ return true;
+ }
+ boolean isSupported = false;
+ try {
+ MediaCodecInfo codecInfo = MediaCodecUtil.getDecoderInfo(mimeType, false, false);
+ isSupported = codecInfo.isVideoSizeAndRateSupportedV21(width, height, frameRate);
+ } catch (Exception e) {
+ // Failed to get decoder info - assume it is supported
+ isSupported = true;
+ }
+ return isSupported;
+ }
+
+ private int getGroupIndexForDefaultLocale(TrackGroupArray groups) {
+ if (groups.length == 0){
+ return C.INDEX_UNSET;
+ }
+
+ int groupIndex = 0; // default if no match
+ String locale2 = Locale.getDefault().getLanguage(); // 2 letter code
+ String locale3 = Locale.getDefault().getISO3Language(); // 3 letter code
+ for (int i = 0; i < groups.length; ++i) {
+ Format format = groups.get(i).getFormat(0);
+ String language = format.language;
+ if (language != null && (language.equals(locale2) || language.equals(locale3))) {
+ groupIndex = i;
+ break;
+ }
+ }
+ return groupIndex;
+ }
+
+ public void setSelectedVideoTrack(String type, Dynamic value) {
+ videoTrackType = type;
+ videoTrackValue = value;
+ setSelectedTrack(C.TRACK_TYPE_VIDEO, videoTrackType, videoTrackValue);
+ }
+
+ public void setSelectedAudioTrack(String type, Dynamic value) {
+ audioTrackType = type;
+ audioTrackValue = value;
+ setSelectedTrack(C.TRACK_TYPE_AUDIO, audioTrackType, audioTrackValue);
+ }
+
+ public void setSelectedTextTrack(String type, Dynamic value) {
+ textTrackType = type;
+ textTrackValue = value;
+ setSelectedTrack(C.TRACK_TYPE_TEXT, textTrackType, textTrackValue);
+ }
+
+ public void setPausedModifier(boolean paused) {
+ isPaused = paused;
+ if (player != null) {
+ if (!paused) {
+ startPlayback();
+ } else {
+ pausePlayback();
+ }
+ }
+ }
+
+ public void setMutedModifier(boolean muted) {
+ this.muted = muted;
+ if (player != null) {
+ player.setVolume(muted ? 0.f : audioVolume);
+ }
+ }
+
+ public void setVolumeModifier(float volume) {
+ audioVolume = volume;
+ if (player != null) {
+ player.setVolume(audioVolume);
+ }
+ }
+
+ public void seekTo(long positionMs) {
+ if (player != null) {
+ player.seekTo(positionMs);
+ eventEmitter.seek(player.getCurrentPosition(), positionMs);
+ }
+ }
+
+ public void setRateModifier(float newRate) {
+ rate = newRate;
+
+ if (player != null) {
+ PlaybackParameters params = new PlaybackParameters(rate, 1f);
+ player.setPlaybackParameters(params);
+ }
+ }
+
+ public void setMaxBitRateModifier(int newMaxBitRate) {
+ maxBitRate = newMaxBitRate;
+ if (player != null) {
+ trackSelector.setParameters(trackSelector.buildUponParameters()
+ .setMaxVideoBitrate(maxBitRate == 0 ? Integer.MAX_VALUE : maxBitRate));
+ }
+ }
+
+ public void setMinLoadRetryCountModifier(int newMinLoadRetryCount) {
+ minLoadRetryCount = newMinLoadRetryCount;
+ releasePlayer();
+ initializePlayer();
+ }
+
+ public void setPlayInBackground(boolean playInBackground) {
+ this.playInBackground = playInBackground;
+ }
+
+ public void setDisableFocus(boolean disableFocus) {
+ this.disableFocus = disableFocus;
+ }
+
+ public void setFocusable(boolean focusable) {
+ this.focusable = focusable;
+ exoPlayerView.setFocusable(this.focusable);
+ }
+
+ public void setBackBufferDurationMs(int backBufferDurationMs) {
+ Runtime runtime = Runtime.getRuntime();
+ long usedMemory = runtime.totalMemory() - runtime.freeMemory();
+ long freeMemory = runtime.maxMemory() - usedMemory;
+ long reserveMemory = (long)minBackBufferMemoryReservePercent * runtime.maxMemory();
+ if (reserveMemory > freeMemory) {
+ // We don't have enough memory in reserve so we will
+ Log.w("ExoPlayer Warning", "Not enough reserve memory, setting back buffer to 0ms to reduce memory pressure!");
+ this.backBufferDurationMs = 0;
+ return;
+ }
+ this.backBufferDurationMs = backBufferDurationMs;
+ }
+
+ public void setContentStartTime(int contentStartTime) {
+ this.contentStartTime = (long)contentStartTime;
+ }
+
+ public void setDisableBuffering(boolean disableBuffering) {
+ this.disableBuffering = disableBuffering;
+ }
+
+ public void setDisableDisconnectError(boolean disableDisconnectError) {
+ this.disableDisconnectError = disableDisconnectError;
+ }
+
+ public void setFullscreen(boolean fullscreen) {
+ if (fullscreen == isFullscreen) {
+ return; // Avoid generating events when nothing is changing
+ }
+ isFullscreen = fullscreen;
+
+ Activity activity = themedReactContext.getCurrentActivity();
+ if (activity == null) {
+ return;
+ }
+
+ if (fullScreenPlayerView == null) {
+ fullScreenPlayerView = new FullScreenPlayerView(getContext(), exoPlayerView, playerControlView, new OnBackPressedCallback(true) {
+ @Override
+ public void handleOnBackPressed() {
+ setFullscreen(false);
+ }
+ });
+ }
+
+ Window window = activity.getWindow();
+ View decorView = window.getDecorView();
+ int uiOptions;
+ if (isFullscreen) {
+ if (Util.SDK_INT >= 19) { // 4.4+
+ uiOptions = SYSTEM_UI_FLAG_HIDE_NAVIGATION
+ | SYSTEM_UI_FLAG_IMMERSIVE_STICKY
+ | SYSTEM_UI_FLAG_FULLSCREEN;
+ } else {
+ uiOptions = SYSTEM_UI_FLAG_HIDE_NAVIGATION
+ | SYSTEM_UI_FLAG_FULLSCREEN;
+ }
+ eventEmitter.fullscreenWillPresent();
+ if (controls) {
+ fullScreenPlayerView.show();
+ }
+ post(() -> {
+ decorView.setSystemUiVisibility(uiOptions);
+ eventEmitter.fullscreenDidPresent();
+ });
+ } else {
+ uiOptions = View.SYSTEM_UI_FLAG_VISIBLE;
+ eventEmitter.fullscreenWillDismiss();
+ if (controls) {
+ fullScreenPlayerView.dismiss();
+ reLayout(exoPlayerView);
+ }
+ post(() -> {
+ decorView.setSystemUiVisibility(uiOptions);
+ eventEmitter.fullscreenDidDismiss();
+ });
+ }
+ }
+
+ public void setUseTextureView(boolean useTextureView) {
+ boolean finallyUseTextureView = useTextureView && this.drmUUID == null;
+ exoPlayerView.setUseTextureView(finallyUseTextureView);
+ }
+
+ public void useSecureView(boolean useSecureView) {
+ exoPlayerView.useSecureView(useSecureView);
+ }
+
+ public void setHideShutterView(boolean hideShutterView) {
+ exoPlayerView.setHideShutterView(hideShutterView);
+ }
+
+ public void setBufferConfig(int newMinBufferMs, int newMaxBufferMs, int newBufferForPlaybackMs, int newBufferForPlaybackAfterRebufferMs, double newMaxHeapAllocationPercent, double newMinBackBufferMemoryReservePercent, double newMinBufferMemoryReservePercent) {
+ minBufferMs = newMinBufferMs;
+ maxBufferMs = newMaxBufferMs;
+ bufferForPlaybackMs = newBufferForPlaybackMs;
+ bufferForPlaybackAfterRebufferMs = newBufferForPlaybackAfterRebufferMs;
+ maxHeapAllocationPercent = newMaxHeapAllocationPercent;
+ minBackBufferMemoryReservePercent = newMinBackBufferMemoryReservePercent;
+ minBufferMemoryReservePercent = newMinBufferMemoryReservePercent;
+ releasePlayer();
+ initializePlayer();
+ }
+
+ public void setDrmType(UUID drmType) {
+ this.drmUUID = drmType;
+ }
+
+ public void setDrmLicenseUrl(String licenseUrl){
+ this.drmLicenseUrl = licenseUrl;
+ }
+
+ public void setDrmLicenseHeader(String[] header){
+ this.drmLicenseHeader = header;
+ }
+
+
+ @Override
+ public void onDrmKeysLoaded(int windowIndex, MediaSource.MediaPeriodId mediaPeriodId) {
+ Log.d("DRM Info", "onDrmKeysLoaded");
+ }
+
+ @Override
+ public void onDrmSessionManagerError(int windowIndex, MediaSource.MediaPeriodId mediaPeriodId, Exception e) {
+ Log.d("DRM Info", "onDrmSessionManagerError");
+ eventEmitter.error("onDrmSessionManagerError", e, "3002");
+ }
+
+ @Override
+ public void onDrmKeysRestored(int windowIndex, MediaSource.MediaPeriodId mediaPeriodId) {
+ Log.d("DRM Info", "onDrmKeysRestored");
+ }
+
+ @Override
+ public void onDrmKeysRemoved(int windowIndex, MediaSource.MediaPeriodId mediaPeriodId) {
+ Log.d("DRM Info", "onDrmKeysRemoved");
+ }
+
+ /**
+ * Handling controls prop
+ *
+ * @param controls Controls prop, if true enable controls, if false disable them
+ */
+ public void setControls(boolean controls) {
+ this.controls = controls;
+ if (player == null || exoPlayerView == null) return;
+ if (controls) {
+ addPlayerControl();
+ } else {
+ int indexOfPC = indexOfChild(playerControlView);
+ if (indexOfPC != -1) {
+ removeViewAt(indexOfPC);
+ }
+ }
+ }
+
+ public void setSubtitleStyle(SubtitleStyle style) {
+ exoPlayerView.setSubtitleStyle(style);
+ }
+}
diff --git a/android-exoplayer/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java
similarity index 69%
rename from android-exoplayer/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java
rename to android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java
index c7c96346..a4b03b58 100644
--- a/android-exoplayer/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java
+++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java
@@ -3,19 +3,25 @@ package com.brentvatne.exoplayer;
import android.content.Context;
import android.net.Uri;
import android.text.TextUtils;
+import android.util.Log;
import com.facebook.react.bridge.Dynamic;
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.bridge.ReadableMap;
+import com.facebook.react.bridge.ReadableMapKeySetIterator;
import com.facebook.react.common.MapBuilder;
import com.facebook.react.uimanager.ThemedReactContext;
import com.facebook.react.uimanager.ViewGroupManager;
import com.facebook.react.uimanager.annotations.ReactProp;
+import com.facebook.react.bridge.ReactMethod;
+import com.google.android.exoplayer2.util.Util;
import com.google.android.exoplayer2.DefaultLoadControl;
import com.google.android.exoplayer2.upstream.RawResourceDataSource;
import java.util.HashMap;
+import java.util.ArrayList;
import java.util.Map;
+import java.util.UUID;
import javax.annotation.Nullable;
@@ -26,6 +32,10 @@ public class ReactExoplayerViewManager extends ViewGroupManager drmKeyRequestPropertiesList = new ArrayList<>();
+ ReadableMapKeySetIterator itr = drmHeaders.keySetIterator();
+ while (itr.hasNextKey()) {
+ String key = itr.nextKey();
+ drmKeyRequestPropertiesList.add(key);
+ drmKeyRequestPropertiesList.add(drmHeaders.getString(key));
+ }
+ videoView.setDrmLicenseHeader(drmKeyRequestPropertiesList.toArray(new String[0]));
+ }
+ videoView.setUseTextureView(false);
+ }
+ }
+ }
+
@ReactProp(name = PROP_SRC)
public void setSrc(final ReactExoplayerView videoView, @Nullable ReadableMap src) {
Context context = videoView.getContext().getApplicationContext();
@@ -107,8 +154,8 @@ public class ReactExoplayerViewManager extends ViewGroupManager headers = src.hasKey(PROP_SRC_HEADERS) ? toStringMap(src.getMap(PROP_SRC_HEADERS)) : null;
-
if (TextUtils.isEmpty(uriString)) {
+ videoView.clearSrc();
return;
}
@@ -136,6 +183,8 @@ public class ReactExoplayerViewManager extends ViewGroupManager createNativeModules(ReactApplicationContext reactContext) {
- return Collections.emptyList();
+ return Collections.singletonList(
+ new VideoDecoderPropertiesModule(reactContext)
+ );
}
// Deprecated RN 0.47
@@ -23,8 +35,12 @@ public class ReactVideoPackage implements ReactPackage {
return Collections.emptyList();
}
+
@Override
public List createViewManagers(ReactApplicationContext reactContext) {
- return Arrays.asList(new ReactVideoViewManager());
+ if (config == null) {
+ config = new DefaultReactExoplayerConfig(reactContext);
+ }
+ return Collections.singletonList(new ReactExoplayerViewManager(config));
}
}
diff --git a/android/src/main/java/com/brentvatne/react/ReactVideoView.java b/android/src/main/java/com/brentvatne/react/ReactVideoView.java
deleted file mode 100644
index 89b4b89c..00000000
--- a/android/src/main/java/com/brentvatne/react/ReactVideoView.java
+++ /dev/null
@@ -1,784 +0,0 @@
-package com.brentvatne.react;
-
-import android.annotation.SuppressLint;
-import android.annotation.TargetApi;
-import android.app.Activity;
-import android.content.res.AssetFileDescriptor;
-import android.graphics.Matrix;
-import android.media.MediaPlayer;
-import android.media.TimedMetaData;
-import android.net.Uri;
-import android.os.Build;
-import android.os.Handler;
-import android.util.Log;
-import android.view.MotionEvent;
-import android.view.WindowManager;
-import android.view.View;
-import android.view.Window;
-import android.webkit.CookieManager;
-import android.widget.MediaController;
-
-import com.android.vending.expansion.zipfile.APKExpansionSupport;
-import com.android.vending.expansion.zipfile.ZipResourceFile;
-import com.facebook.react.bridge.Arguments;
-import com.facebook.react.bridge.LifecycleEventListener;
-import com.facebook.react.bridge.ReadableMap;
-import com.facebook.react.bridge.WritableMap;
-import com.facebook.react.bridge.WritableArray;
-import com.facebook.react.bridge.WritableNativeArray;
-import com.facebook.react.uimanager.ThemedReactContext;
-import com.facebook.react.uimanager.events.RCTEventEmitter;
-import com.yqritc.scalablevideoview.ScalableType;
-import com.yqritc.scalablevideoview.ScalableVideoView;
-import com.yqritc.scalablevideoview.ScaleManager;
-import com.yqritc.scalablevideoview.Size;
-
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.util.HashMap;
-import java.util.Map;
-import java.lang.Math;
-import java.math.BigDecimal;
-
-import javax.annotation.Nullable;
-
-@SuppressLint("ViewConstructor")
-public class ReactVideoView extends ScalableVideoView implements
- MediaPlayer.OnPreparedListener,
- MediaPlayer.OnErrorListener,
- MediaPlayer.OnBufferingUpdateListener,
- MediaPlayer.OnSeekCompleteListener,
- MediaPlayer.OnCompletionListener,
- MediaPlayer.OnInfoListener,
- LifecycleEventListener,
- MediaController.MediaPlayerControl {
-
- public enum Events {
- EVENT_LOAD_START("onVideoLoadStart"),
- EVENT_LOAD("onVideoLoad"),
- EVENT_ERROR("onVideoError"),
- EVENT_PROGRESS("onVideoProgress"),
- EVENT_TIMED_METADATA("onTimedMetadata"),
- EVENT_SEEK("onVideoSeek"),
- EVENT_END("onVideoEnd"),
- EVENT_STALLED("onPlaybackStalled"),
- EVENT_RESUME("onPlaybackResume"),
- EVENT_READY_FOR_DISPLAY("onReadyForDisplay"),
- EVENT_FULLSCREEN_WILL_PRESENT("onVideoFullscreenPlayerWillPresent"),
- EVENT_FULLSCREEN_DID_PRESENT("onVideoFullscreenPlayerDidPresent"),
- EVENT_FULLSCREEN_WILL_DISMISS("onVideoFullscreenPlayerWillDismiss"),
- EVENT_FULLSCREEN_DID_DISMISS("onVideoFullscreenPlayerDidDismiss");
-
- private final String mName;
-
- Events(final String name) {
- mName = name;
- }
-
- @Override
- public String toString() {
- return mName;
- }
- }
-
- public static final String EVENT_PROP_FAST_FORWARD = "canPlayFastForward";
- public static final String EVENT_PROP_SLOW_FORWARD = "canPlaySlowForward";
- public static final String EVENT_PROP_SLOW_REVERSE = "canPlaySlowReverse";
- public static final String EVENT_PROP_REVERSE = "canPlayReverse";
- public static final String EVENT_PROP_STEP_FORWARD = "canStepForward";
- public static final String EVENT_PROP_STEP_BACKWARD = "canStepBackward";
-
- public static final String EVENT_PROP_DURATION = "duration";
- public static final String EVENT_PROP_PLAYABLE_DURATION = "playableDuration";
- public static final String EVENT_PROP_SEEKABLE_DURATION = "seekableDuration";
- public static final String EVENT_PROP_CURRENT_TIME = "currentTime";
- public static final String EVENT_PROP_SEEK_TIME = "seekTime";
- public static final String EVENT_PROP_NATURALSIZE = "naturalSize";
- public static final String EVENT_PROP_WIDTH = "width";
- public static final String EVENT_PROP_HEIGHT = "height";
- public static final String EVENT_PROP_ORIENTATION = "orientation";
- public static final String EVENT_PROP_METADATA = "metadata";
- public static final String EVENT_PROP_TARGET = "target";
- public static final String EVENT_PROP_METADATA_IDENTIFIER = "identifier";
- public static final String EVENT_PROP_METADATA_VALUE = "value";
-
- public static final String EVENT_PROP_ERROR = "error";
- public static final String EVENT_PROP_WHAT = "what";
- public static final String EVENT_PROP_EXTRA = "extra";
-
- private ThemedReactContext mThemedReactContext;
- private RCTEventEmitter mEventEmitter;
-
- private Handler mProgressUpdateHandler = new Handler();
- private Runnable mProgressUpdateRunnable = null;
- private Handler videoControlHandler = new Handler();
- private MediaController mediaController;
-
- private String mSrcUriString = null;
- private String mSrcType = "mp4";
- private ReadableMap mRequestHeaders = null;
- private boolean mSrcIsNetwork = false;
- private boolean mSrcIsAsset = false;
- private ScalableType mResizeMode = ScalableType.LEFT_TOP;
- private boolean mRepeat = false;
- private boolean mPaused = false;
- private boolean mMuted = false;
- private float mVolume = 1.0f;
- private float mStereoPan = 0.0f;
- private float mProgressUpdateInterval = 250.0f;
- private float mRate = 1.0f;
- private float mActiveRate = 1.0f;
- private long mSeekTime = 0;
- private boolean mPlayInBackground = false;
- private boolean mBackgroundPaused = false;
- private boolean mIsFullscreen = false;
-
- private int mMainVer = 0;
- private int mPatchVer = 0;
-
- private boolean mMediaPlayerValid = false; // True if mMediaPlayer is in prepared, started, paused or completed state.
-
- private int mVideoDuration = 0;
- private int mVideoBufferedDuration = 0;
- private boolean isCompleted = false;
- private boolean mUseNativeControls = false;
-
- public ReactVideoView(ThemedReactContext themedReactContext) {
- super(themedReactContext);
-
- mThemedReactContext = themedReactContext;
- mEventEmitter = themedReactContext.getJSModule(RCTEventEmitter.class);
- themedReactContext.addLifecycleEventListener(this);
-
- initializeMediaPlayerIfNeeded();
- setSurfaceTextureListener(this);
-
- mProgressUpdateRunnable = new Runnable() {
- @Override
- public void run() {
-
- if (mMediaPlayerValid && !isCompleted && !mPaused && !mBackgroundPaused) {
- WritableMap event = Arguments.createMap();
- event.putDouble(EVENT_PROP_CURRENT_TIME, mMediaPlayer.getCurrentPosition() / 1000.0);
- event.putDouble(EVENT_PROP_PLAYABLE_DURATION, mVideoBufferedDuration / 1000.0); //TODO:mBufferUpdateRunnable
- event.putDouble(EVENT_PROP_SEEKABLE_DURATION, mVideoDuration / 1000.0);
- mEventEmitter.receiveEvent(getId(), Events.EVENT_PROGRESS.toString(), event);
-
- // Check for update after an interval
- mProgressUpdateHandler.postDelayed(mProgressUpdateRunnable, Math.round(mProgressUpdateInterval));
- }
- }
- };
- }
-
- @Override
- public boolean onTouchEvent(MotionEvent event) {
- if (mUseNativeControls) {
- initializeMediaControllerIfNeeded();
- mediaController.show();
- }
-
- return super.onTouchEvent(event);
- }
-
- @Override
- @SuppressLint("DrawAllocation")
- protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
- super.onLayout(changed, left, top, right, bottom);
-
- if (!changed || !mMediaPlayerValid) {
- return;
- }
-
- int videoWidth = getVideoWidth();
- int videoHeight = getVideoHeight();
-
- if (videoWidth == 0 || videoHeight == 0) {
- return;
- }
-
- Size viewSize = new Size(getWidth(), getHeight());
- Size videoSize = new Size(videoWidth, videoHeight);
- ScaleManager scaleManager = new ScaleManager(viewSize, videoSize);
- Matrix matrix = scaleManager.getScaleMatrix(mScalableType);
- if (matrix != null) {
- setTransform(matrix);
- }
- }
-
- private void initializeMediaPlayerIfNeeded() {
- if (mMediaPlayer == null) {
- mMediaPlayerValid = false;
- mMediaPlayer = new MediaPlayer();
- mMediaPlayer.setScreenOnWhilePlaying(true);
- mMediaPlayer.setOnVideoSizeChangedListener(this);
- mMediaPlayer.setOnErrorListener(this);
- mMediaPlayer.setOnPreparedListener(this);
- mMediaPlayer.setOnBufferingUpdateListener(this);
- mMediaPlayer.setOnSeekCompleteListener(this);
- mMediaPlayer.setOnCompletionListener(this);
- mMediaPlayer.setOnInfoListener(this);
- if (Build.VERSION.SDK_INT >= 23) {
- mMediaPlayer.setOnTimedMetaDataAvailableListener(new TimedMetaDataAvailableListener());
- }
- }
- }
-
- private void initializeMediaControllerIfNeeded() {
- if (mediaController == null) {
- mediaController = new MediaController(this.getContext());
- }
- }
-
- public void cleanupMediaPlayerResources() {
- if ( mediaController != null ) {
- mediaController.hide();
- }
- if ( mMediaPlayer != null ) {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
- mMediaPlayer.setOnTimedMetaDataAvailableListener(null);
- }
- mMediaPlayerValid = false;
- release();
- }
- if (mIsFullscreen) {
- setFullscreen(false);
- }
- if (mThemedReactContext != null) {
- mThemedReactContext.removeLifecycleEventListener(this);
- mThemedReactContext = null;
- }
- }
-
- public void setSrc(final String uriString, final String type, final boolean isNetwork, final boolean isAsset, final ReadableMap requestHeaders) {
- setSrc(uriString, type, isNetwork, isAsset, requestHeaders, 0, 0);
- }
-
- public void setSrc(final String uriString, final String type, final boolean isNetwork, final boolean isAsset, final ReadableMap requestHeaders, final int expansionMainVersion, final int expansionPatchVersion) {
-
- mSrcUriString = uriString;
- mSrcType = type;
- mSrcIsNetwork = isNetwork;
- mSrcIsAsset = isAsset;
- mRequestHeaders = requestHeaders;
- mMainVer = expansionMainVersion;
- mPatchVer = expansionPatchVersion;
-
-
- mMediaPlayerValid = false;
- mVideoDuration = 0;
- mVideoBufferedDuration = 0;
-
- initializeMediaPlayerIfNeeded();
- mMediaPlayer.reset();
-
- try {
- if (isNetwork) {
- // Use the shared CookieManager to access the cookies
- // set by WebViews inside the same app
- CookieManager cookieManager = CookieManager.getInstance();
-
- Uri parsedUrl = Uri.parse(uriString);
- Uri.Builder builtUrl = parsedUrl.buildUpon();
-
- String cookie = cookieManager.getCookie(builtUrl.build().toString());
-
- Map headers = new HashMap();
-
- if (cookie != null) {
- headers.put("Cookie", cookie);
- }
-
- if (mRequestHeaders != null) {
- headers.putAll(toStringMap(mRequestHeaders));
- }
-
- /* According to https://github.com/react-native-community/react-native-video/pull/537
- * there is an issue with this where it can cause a IOException.
- * TODO: diagnose this exception and fix it
- */
- setDataSource(mThemedReactContext, parsedUrl, headers);
- } else if (isAsset) {
- if (uriString.startsWith("content://")) {
- Uri parsedUrl = Uri.parse(uriString);
- setDataSource(mThemedReactContext, parsedUrl);
- } else {
- setDataSource(uriString);
- }
- } else {
- ZipResourceFile expansionFile= null;
- AssetFileDescriptor fd= null;
- if(mMainVer>0) {
- try {
- expansionFile = APKExpansionSupport.getAPKExpansionZipFile(mThemedReactContext, mMainVer, mPatchVer);
- fd = expansionFile.getAssetFileDescriptor(uriString.replace(".mp4","") + ".mp4");
- } catch (IOException e) {
- e.printStackTrace();
- } catch (NullPointerException e) {
- e.printStackTrace();
- }
- }
- if(fd==null) {
- int identifier = mThemedReactContext.getResources().getIdentifier(
- uriString,
- "drawable",
- mThemedReactContext.getPackageName()
- );
- if (identifier == 0) {
- identifier = mThemedReactContext.getResources().getIdentifier(
- uriString,
- "raw",
- mThemedReactContext.getPackageName()
- );
- }
- setRawData(identifier);
- }
- else {
- setDataSource(fd.getFileDescriptor(), fd.getStartOffset(),fd.getLength());
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- return;
- }
-
- WritableMap src = Arguments.createMap();
-
- WritableMap wRequestHeaders = Arguments.createMap();
- wRequestHeaders.merge(mRequestHeaders);
-
- src.putString(ReactVideoViewManager.PROP_SRC_URI, uriString);
- src.putString(ReactVideoViewManager.PROP_SRC_TYPE, type);
- src.putMap(ReactVideoViewManager.PROP_SRC_HEADERS, wRequestHeaders);
- src.putBoolean(ReactVideoViewManager.PROP_SRC_IS_NETWORK, isNetwork);
- if(mMainVer>0) {
- src.putInt(ReactVideoViewManager.PROP_SRC_MAINVER, mMainVer);
- if(mPatchVer>0) {
- src.putInt(ReactVideoViewManager.PROP_SRC_PATCHVER, mPatchVer);
- }
- }
- WritableMap event = Arguments.createMap();
- event.putMap(ReactVideoViewManager.PROP_SRC, src);
- mEventEmitter.receiveEvent(getId(), Events.EVENT_LOAD_START.toString(), event);
- isCompleted = false;
-
- try {
- prepareAsync(this);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- public void setResizeModeModifier(final ScalableType resizeMode) {
- mResizeMode = resizeMode;
-
- if (mMediaPlayerValid) {
- setScalableType(resizeMode);
- invalidate();
- }
- }
-
- public void setRepeatModifier(final boolean repeat) {
-
- mRepeat = repeat;
-
- if (mMediaPlayerValid) {
- setLooping(repeat);
- }
- }
-
- public void setPausedModifier(final boolean paused) {
- mPaused = paused;
-
- if (!mMediaPlayerValid) {
- return;
- }
-
- if (mPaused) {
- if (mMediaPlayer.isPlaying()) {
- pause();
- }
- } else {
- if (!mMediaPlayer.isPlaying()) {
- start();
- // Setting the rate unpauses, so we have to wait for an unpause
- if (mRate != mActiveRate) {
- setRateModifier(mRate);
- }
-
- // Also Start the Progress Update Handler
- mProgressUpdateHandler.post(mProgressUpdateRunnable);
- }
- }
- setKeepScreenOn(!mPaused);
- }
-
- // reduces the volume based on stereoPan
- private float calulateRelativeVolume() {
- float relativeVolume = (mVolume * (1 - Math.abs(mStereoPan)));
- // only one decimal allowed
- BigDecimal roundRelativeVolume = new BigDecimal(relativeVolume).setScale(1, BigDecimal.ROUND_HALF_UP);
- return roundRelativeVolume.floatValue();
- }
-
- public void setMutedModifier(final boolean muted) {
- mMuted = muted;
-
- if (!mMediaPlayerValid) {
- return;
- }
-
- if (mMuted) {
- setVolume(0, 0);
- } else if (mStereoPan < 0) {
- // louder on the left channel
- setVolume(mVolume, calulateRelativeVolume());
- } else if (mStereoPan > 0) {
- // louder on the right channel
- setVolume(calulateRelativeVolume(), mVolume);
- } else {
- // same volume on both channels
- setVolume(mVolume, mVolume);
- }
- }
-
- public void setVolumeModifier(final float volume) {
- mVolume = volume;
- setMutedModifier(mMuted);
- }
-
- public void setStereoPan(final float stereoPan) {
- mStereoPan = stereoPan;
- setMutedModifier(mMuted);
- }
-
- public void setProgressUpdateInterval(final float progressUpdateInterval) {
- mProgressUpdateInterval = progressUpdateInterval;
- }
-
- public void setRateModifier(final float rate) {
- mRate = rate;
-
- if (mMediaPlayerValid) {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
- if (!mPaused) { // Applying the rate while paused will cause the video to start
- /* Per https://stackoverflow.com/questions/39442522/setplaybackparams-causes-illegalstateexception
- * Some devices throw an IllegalStateException if you set the rate without first calling reset()
- * TODO: Call reset() then reinitialize the player
- */
- try {
- mMediaPlayer.setPlaybackParams(mMediaPlayer.getPlaybackParams().setSpeed(rate));
- mActiveRate = rate;
- } catch (Exception e) {
- Log.e(ReactVideoViewManager.REACT_CLASS, "Unable to set rate, unsupported on this device");
- }
- }
- } else {
- Log.e(ReactVideoViewManager.REACT_CLASS, "Setting playback rate is not yet supported on Android versions below 6.0");
- }
- }
- }
-
- public void setFullscreen(boolean isFullscreen) {
- if (isFullscreen == mIsFullscreen) {
- return; // Avoid generating events when nothing is changing
- }
- mIsFullscreen = isFullscreen;
-
- Activity activity = mThemedReactContext.getCurrentActivity();
- if (activity == null) {
- return;
- }
- Window window = activity.getWindow();
- View decorView = window.getDecorView();
- int uiOptions;
- if (mIsFullscreen) {
- if (Build.VERSION.SDK_INT >= 19) { // 4.4+
- uiOptions = SYSTEM_UI_FLAG_HIDE_NAVIGATION
- | SYSTEM_UI_FLAG_IMMERSIVE_STICKY
- | SYSTEM_UI_FLAG_FULLSCREEN;
- } else {
- uiOptions = SYSTEM_UI_FLAG_HIDE_NAVIGATION
- | SYSTEM_UI_FLAG_FULLSCREEN;
- }
- mEventEmitter.receiveEvent(getId(), Events.EVENT_FULLSCREEN_WILL_PRESENT.toString(), null);
- decorView.setSystemUiVisibility(uiOptions);
- mEventEmitter.receiveEvent(getId(), Events.EVENT_FULLSCREEN_DID_PRESENT.toString(), null);
- } else {
- uiOptions = View.SYSTEM_UI_FLAG_VISIBLE;
- mEventEmitter.receiveEvent(getId(), Events.EVENT_FULLSCREEN_WILL_DISMISS.toString(), null);
- decorView.setSystemUiVisibility(uiOptions);
- mEventEmitter.receiveEvent(getId(), Events.EVENT_FULLSCREEN_DID_DISMISS.toString(), null);
- }
- }
-
- public void applyModifiers() {
- setResizeModeModifier(mResizeMode);
- setRepeatModifier(mRepeat);
- setPausedModifier(mPaused);
- setMutedModifier(mMuted);
- setProgressUpdateInterval(mProgressUpdateInterval);
- setRateModifier(mRate);
- }
-
- public void setPlayInBackground(final boolean playInBackground) {
-
- mPlayInBackground = playInBackground;
- }
-
- public void setControls(boolean controls) {
- this.mUseNativeControls = controls;
- }
-
- @Override
- public void onPrepared(MediaPlayer mp) {
-
- mMediaPlayerValid = true;
- mVideoDuration = mp.getDuration();
-
- WritableMap naturalSize = Arguments.createMap();
- naturalSize.putInt(EVENT_PROP_WIDTH, mp.getVideoWidth());
- naturalSize.putInt(EVENT_PROP_HEIGHT, mp.getVideoHeight());
- if (mp.getVideoWidth() > mp.getVideoHeight())
- naturalSize.putString(EVENT_PROP_ORIENTATION, "landscape");
- else
- naturalSize.putString(EVENT_PROP_ORIENTATION, "portrait");
-
- WritableMap event = Arguments.createMap();
- event.putDouble(EVENT_PROP_DURATION, mVideoDuration / 1000.0);
- event.putDouble(EVENT_PROP_CURRENT_TIME, mp.getCurrentPosition() / 1000.0);
- event.putMap(EVENT_PROP_NATURALSIZE, naturalSize);
- // TODO: Actually check if you can.
- event.putBoolean(EVENT_PROP_FAST_FORWARD, true);
- event.putBoolean(EVENT_PROP_SLOW_FORWARD, true);
- event.putBoolean(EVENT_PROP_SLOW_REVERSE, true);
- event.putBoolean(EVENT_PROP_REVERSE, true);
- event.putBoolean(EVENT_PROP_FAST_FORWARD, true);
- event.putBoolean(EVENT_PROP_STEP_BACKWARD, true);
- event.putBoolean(EVENT_PROP_STEP_FORWARD, true);
- mEventEmitter.receiveEvent(getId(), Events.EVENT_LOAD.toString(), event);
-
- applyModifiers();
-
- if (mUseNativeControls) {
- initializeMediaControllerIfNeeded();
- mediaController.setMediaPlayer(this);
- mediaController.setAnchorView(this);
-
- videoControlHandler.post(new Runnable() {
- @Override
- public void run() {
- mediaController.setEnabled(true);
- mediaController.show();
- }
- });
- }
-
- selectTimedMetadataTrack(mp);
- }
-
- @Override
- public boolean onError(MediaPlayer mp, int what, int extra) {
-
- WritableMap error = Arguments.createMap();
- error.putInt(EVENT_PROP_WHAT, what);
- error.putInt(EVENT_PROP_EXTRA, extra);
- WritableMap event = Arguments.createMap();
- event.putMap(EVENT_PROP_ERROR, error);
- mEventEmitter.receiveEvent(getId(), Events.EVENT_ERROR.toString(), event);
- return true;
- }
-
- @Override
- public boolean onInfo(MediaPlayer mp, int what, int extra) {
- switch (what) {
- case MediaPlayer.MEDIA_INFO_BUFFERING_START:
- mEventEmitter.receiveEvent(getId(), Events.EVENT_STALLED.toString(), Arguments.createMap());
- break;
- case MediaPlayer.MEDIA_INFO_BUFFERING_END:
- mEventEmitter.receiveEvent(getId(), Events.EVENT_RESUME.toString(), Arguments.createMap());
- break;
- case MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START:
- mEventEmitter.receiveEvent(getId(), Events.EVENT_READY_FOR_DISPLAY.toString(), Arguments.createMap());
- break;
-
- default:
- }
- return false;
- }
-
- @Override
- public void onBufferingUpdate(MediaPlayer mp, int percent) {
- selectTimedMetadataTrack(mp);
- mVideoBufferedDuration = (int) Math.round((double) (mVideoDuration * percent) / 100.0);
- }
-
- public void onSeekComplete(MediaPlayer mp) {
- WritableMap event = Arguments.createMap();
- event.putDouble(EVENT_PROP_CURRENT_TIME, getCurrentPosition() / 1000.0);
- event.putDouble(EVENT_PROP_SEEK_TIME, mSeekTime / 1000.0);
- mEventEmitter.receiveEvent(getId(), Events.EVENT_SEEK.toString(), event);
- mSeekTime = 0;
- }
-
- @Override
- public void seekTo(int msec) {
- if (mMediaPlayerValid) {
- mSeekTime = msec;
- super.seekTo(msec);
- if (isCompleted && mVideoDuration != 0 && msec < mVideoDuration) {
- isCompleted = false;
- }
- }
- }
-
- @Override
- public int getBufferPercentage() {
- return 0;
- }
-
- @Override
- public boolean canPause() {
- return true;
- }
-
- @Override
- public boolean canSeekBackward() {
- return true;
- }
-
- @Override
- public boolean canSeekForward() {
- return true;
- }
-
- @Override
- public int getAudioSessionId() {
- return 0;
- }
-
- @Override
- public void onCompletion(MediaPlayer mp) {
- isCompleted = true;
- mEventEmitter.receiveEvent(getId(), Events.EVENT_END.toString(), null);
- if (!mRepeat) {
- setKeepScreenOn(false);
- }
- }
-
- // This is not fully tested and does not work for all forms of timed metadata
- @TargetApi(23) // 6.0
- public class TimedMetaDataAvailableListener
- implements MediaPlayer.OnTimedMetaDataAvailableListener
- {
- public void onTimedMetaDataAvailable(MediaPlayer mp, TimedMetaData data) {
- WritableMap event = Arguments.createMap();
-
- try {
- String rawMeta = new String(data.getMetaData(), "UTF-8");
- WritableMap id3 = Arguments.createMap();
-
- id3.putString(EVENT_PROP_METADATA_VALUE, rawMeta.substring(rawMeta.lastIndexOf("\u0003") + 1));
- id3.putString(EVENT_PROP_METADATA_IDENTIFIER, "id3/TDEN");
-
- WritableArray metadata = new WritableNativeArray();
-
- metadata.pushMap(id3);
-
- event.putArray(EVENT_PROP_METADATA, metadata);
- event.putDouble(EVENT_PROP_TARGET, getId());
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
-
- mEventEmitter.receiveEvent(getId(), Events.EVENT_TIMED_METADATA.toString(), event);
- }
- }
-
- @Override
- protected void onDetachedFromWindow() {
- mMediaPlayerValid = false;
- super.onDetachedFromWindow();
- setKeepScreenOn(false);
- }
-
- @Override
- protected void onAttachedToWindow() {
- super.onAttachedToWindow();
-
- if(mMainVer>0) {
- setSrc(mSrcUriString, mSrcType, mSrcIsNetwork, mSrcIsAsset, mRequestHeaders, mMainVer, mPatchVer);
- }
- else {
- setSrc(mSrcUriString, mSrcType, mSrcIsNetwork, mSrcIsAsset, mRequestHeaders);
- }
- setKeepScreenOn(true);
- }
-
- @Override
- public void onHostPause() {
- if (mMediaPlayerValid && !mPaused && !mPlayInBackground) {
- /* Pause the video in background
- * Don't update the paused prop, developers should be able to update it on background
- * so that when you return to the app the video is paused
- */
- mBackgroundPaused = true;
- mMediaPlayer.pause();
- }
- }
-
- @Override
- public void onHostResume() {
- mBackgroundPaused = false;
- if (mMediaPlayerValid && !mPlayInBackground && !mPaused) {
- new Handler().post(new Runnable() {
- @Override
- public void run() {
- // Restore original state
- setPausedModifier(false);
- }
- });
- }
- }
-
- @Override
- public void onHostDestroy() {
- }
-
- /**
- * toStringMap converts a {@link ReadableMap} into a HashMap.
- *
- * @param readableMap The ReadableMap to be conveted.
- * @return A HashMap containing the data that was in the ReadableMap.
- * @see 'Adapted from https://github.com/artemyarulin/react-native-eval/blob/master/android/src/main/java/com/evaluator/react/ConversionUtil.java'
- */
- public static Map toStringMap(@Nullable ReadableMap readableMap) {
- Map result = new HashMap<>();
- if (readableMap == null)
- return result;
-
- com.facebook.react.bridge.ReadableMapKeySetIterator iterator = readableMap.keySetIterator();
- while (iterator.hasNextKey()) {
- String key = iterator.nextKey();
- result.put(key, readableMap.getString(key));
- }
-
- return result;
- }
-
- // Select track (so we can use it to listen to timed meta data updates)
- private void selectTimedMetadataTrack(MediaPlayer mp) {
- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
- return;
- }
- try { // It's possible this could throw an exception if the framework doesn't support getting track info
- MediaPlayer.TrackInfo[] trackInfo = mp.getTrackInfo();
- for (int i = 0; i < trackInfo.length; ++i) {
- if (trackInfo[i].getTrackType() == MediaPlayer.TrackInfo.MEDIA_TRACK_TYPE_TIMEDTEXT) {
- mp.selectTrack(i);
- break;
- }
- }
- } catch (Exception e) {}
- }
-}
diff --git a/android/src/main/java/com/brentvatne/react/ReactVideoViewManager.java b/android/src/main/java/com/brentvatne/react/ReactVideoViewManager.java
deleted file mode 100644
index dbf152a8..00000000
--- a/android/src/main/java/com/brentvatne/react/ReactVideoViewManager.java
+++ /dev/null
@@ -1,166 +0,0 @@
-package com.brentvatne.react;
-
-import com.brentvatne.react.ReactVideoView.Events;
-import com.facebook.react.bridge.Arguments;
-import com.facebook.react.bridge.ReadableMap;
-import com.facebook.react.bridge.WritableMap;
-import com.facebook.react.common.MapBuilder;
-import com.facebook.react.uimanager.annotations.ReactProp;
-import com.facebook.react.uimanager.SimpleViewManager;
-import com.facebook.react.uimanager.ThemedReactContext;
-import com.facebook.react.uimanager.events.RCTEventEmitter;
-import com.yqritc.scalablevideoview.ScalableType;
-
-import javax.annotation.Nullable;
-import java.util.Map;
-
-public class ReactVideoViewManager extends SimpleViewManager {
-
- public static final String REACT_CLASS = "RCTVideo";
-
- public static final String PROP_SRC = "src";
- public static final String PROP_SRC_URI = "uri";
- public static final String PROP_SRC_TYPE = "type";
- public static final String PROP_SRC_HEADERS = "requestHeaders";
- public static final String PROP_SRC_IS_NETWORK = "isNetwork";
- public static final String PROP_SRC_MAINVER = "mainVer";
- public static final String PROP_SRC_PATCHVER = "patchVer";
- public static final String PROP_SRC_IS_ASSET = "isAsset";
- public static final String PROP_RESIZE_MODE = "resizeMode";
- public static final String PROP_REPEAT = "repeat";
- public static final String PROP_PAUSED = "paused";
- public static final String PROP_MUTED = "muted";
- public static final String PROP_VOLUME = "volume";
- public static final String PROP_STEREO_PAN = "stereoPan";
- public static final String PROP_PROGRESS_UPDATE_INTERVAL = "progressUpdateInterval";
- public static final String PROP_SEEK = "seek";
- public static final String PROP_RATE = "rate";
- public static final String PROP_FULLSCREEN = "fullscreen";
- public static final String PROP_PLAY_IN_BACKGROUND = "playInBackground";
- public static final String PROP_CONTROLS = "controls";
-
- @Override
- public String getName() {
- return REACT_CLASS;
- }
-
- @Override
- protected ReactVideoView createViewInstance(ThemedReactContext themedReactContext) {
- return new ReactVideoView(themedReactContext);
- }
-
- @Override
- public void onDropViewInstance(ReactVideoView view) {
- super.onDropViewInstance(view);
- view.cleanupMediaPlayerResources();
- }
-
- @Override
- @Nullable
- public Map getExportedCustomDirectEventTypeConstants() {
- MapBuilder.Builder builder = MapBuilder.builder();
- for (Events event : Events.values()) {
- builder.put(event.toString(), MapBuilder.of("registrationName", event.toString()));
- }
- return builder.build();
- }
-
- @Override
- @Nullable
- public Map getExportedViewConstants() {
- return MapBuilder.of(
- "ScaleNone", Integer.toString(ScalableType.LEFT_TOP.ordinal()),
- "ScaleToFill", Integer.toString(ScalableType.FIT_XY.ordinal()),
- "ScaleAspectFit", Integer.toString(ScalableType.FIT_CENTER.ordinal()),
- "ScaleAspectFill", Integer.toString(ScalableType.CENTER_CROP.ordinal())
- );
- }
-
- @ReactProp(name = PROP_SRC)
- public void setSrc(final ReactVideoView videoView, @Nullable ReadableMap src) {
- int mainVer = src.getInt(PROP_SRC_MAINVER);
- int patchVer = src.getInt(PROP_SRC_PATCHVER);
- if(mainVer<0) { mainVer = 0; }
- if(patchVer<0) { patchVer = 0; }
- if(mainVer>0) {
- videoView.setSrc(
- src.getString(PROP_SRC_URI),
- src.getString(PROP_SRC_TYPE),
- src.getBoolean(PROP_SRC_IS_NETWORK),
- src.getBoolean(PROP_SRC_IS_ASSET),
- src.getMap(PROP_SRC_HEADERS),
- mainVer,
- patchVer
- );
- }
- else {
- videoView.setSrc(
- src.getString(PROP_SRC_URI),
- src.getString(PROP_SRC_TYPE),
- src.getBoolean(PROP_SRC_IS_NETWORK),
- src.getBoolean(PROP_SRC_IS_ASSET),
- src.getMap(PROP_SRC_HEADERS)
- );
- }
- }
-
- @ReactProp(name = PROP_RESIZE_MODE)
- public void setResizeMode(final ReactVideoView videoView, final String resizeModeOrdinalString) {
- videoView.setResizeModeModifier(ScalableType.values()[Integer.parseInt(resizeModeOrdinalString)]);
- }
-
- @ReactProp(name = PROP_REPEAT, defaultBoolean = false)
- public void setRepeat(final ReactVideoView videoView, final boolean repeat) {
- videoView.setRepeatModifier(repeat);
- }
-
- @ReactProp(name = PROP_PAUSED, defaultBoolean = false)
- public void setPaused(final ReactVideoView videoView, final boolean paused) {
- videoView.setPausedModifier(paused);
- }
-
- @ReactProp(name = PROP_MUTED, defaultBoolean = false)
- public void setMuted(final ReactVideoView videoView, final boolean muted) {
- videoView.setMutedModifier(muted);
- }
-
- @ReactProp(name = PROP_VOLUME, defaultFloat = 1.0f)
- public void setVolume(final ReactVideoView videoView, final float volume) {
- videoView.setVolumeModifier(volume);
- }
-
- @ReactProp(name = PROP_STEREO_PAN)
- public void setStereoPan(final ReactVideoView videoView, final float stereoPan) {
- videoView.setStereoPan(stereoPan);
- }
-
- @ReactProp(name = PROP_PROGRESS_UPDATE_INTERVAL, defaultFloat = 250.0f)
- public void setProgressUpdateInterval(final ReactVideoView videoView, final float progressUpdateInterval) {
- videoView.setProgressUpdateInterval(progressUpdateInterval);
- }
-
- @ReactProp(name = PROP_SEEK)
- public void setSeek(final ReactVideoView videoView, final float seek) {
- videoView.seekTo(Math.round(seek * 1000.0f));
- }
-
- @ReactProp(name = PROP_RATE)
- public void setRate(final ReactVideoView videoView, final float rate) {
- videoView.setRateModifier(rate);
- }
-
- @ReactProp(name = PROP_FULLSCREEN, defaultBoolean = false)
- public void setFullscreen(final ReactVideoView videoView, final boolean fullscreen) {
- videoView.setFullscreen(fullscreen);
- }
-
- @ReactProp(name = PROP_PLAY_IN_BACKGROUND, defaultBoolean = false)
- public void setPlayInBackground(final ReactVideoView videoView, final boolean playInBackground) {
- videoView.setPlayInBackground(playInBackground);
- }
-
- @ReactProp(name = PROP_CONTROLS, defaultBoolean = false)
- public void setControls(final ReactVideoView videoView, final boolean controls) {
- videoView.setControls(controls);
- }
-}
diff --git a/android/src/main/java/com/brentvatne/react/VideoDecoderPropertiesModule.java b/android/src/main/java/com/brentvatne/react/VideoDecoderPropertiesModule.java
new file mode 100644
index 00000000..6622e7f9
--- /dev/null
+++ b/android/src/main/java/com/brentvatne/react/VideoDecoderPropertiesModule.java
@@ -0,0 +1,107 @@
+package com.brentvatne.react;
+
+import android.annotation.SuppressLint;
+import android.media.MediaCodecList;
+import android.media.MediaDrm;
+import android.media.MediaFormat;
+import android.media.UnsupportedSchemeException;
+import android.os.Build;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+
+import com.facebook.react.bridge.Promise;
+import com.facebook.react.bridge.ReactApplicationContext;
+import com.facebook.react.bridge.ReactContextBaseJavaModule;
+import com.facebook.react.bridge.ReactMethod;
+
+import java.util.UUID;
+
+@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)
+public class VideoDecoderPropertiesModule extends ReactContextBaseJavaModule {
+
+ ReactApplicationContext reactContext;
+
+ @NonNull
+ @Override
+ public String getName() {
+ return "VideoDecoderProperties";
+ }
+
+ @SuppressLint("ObsoleteSdkInt")
+ @ReactMethod
+ public void getWidevineLevel(Promise p) {
+ int widevineLevel = 0;
+
+ if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) {
+ p.resolve(widevineLevel);
+ return;
+ }
+ final UUID WIDEVINE_UUID = new UUID(0xEDEF8BA979D64ACEL, 0xA3C827DCD51D21EDL);
+ final String WIDEVINE_SECURITY_LEVEL_1 = "L1";
+ final String WIDEVINE_SECURITY_LEVEL_2 = "L2";
+ final String WIDEVINE_SECURITY_LEVEL_3 = "L3";
+ final String SECURITY_LEVEL_PROPERTY = "securityLevel";
+
+ String securityProperty = null;
+ try {
+ MediaDrm mediaDrm = new MediaDrm(WIDEVINE_UUID);
+ securityProperty = mediaDrm.getPropertyString(SECURITY_LEVEL_PROPERTY);
+ } catch (UnsupportedSchemeException e) {
+ e.printStackTrace();
+ }
+ if (securityProperty == null) {
+ p.resolve(widevineLevel);
+ return;
+ }
+
+ switch (securityProperty) {
+ case WIDEVINE_SECURITY_LEVEL_1: {
+ widevineLevel = 1;
+ break;
+ }
+ case WIDEVINE_SECURITY_LEVEL_2: {
+ widevineLevel = 2;
+ break;
+ }
+ case WIDEVINE_SECURITY_LEVEL_3: {
+ widevineLevel = 3;
+ break;
+ }
+ default: {
+ // widevineLevel 0
+ break;
+ }
+ }
+ p.resolve(widevineLevel);
+ }
+
+ @SuppressLint("ObsoleteSdkInt")
+ @ReactMethod
+ public void isCodecSupported(String mimeType, int width, int height, Promise p) {
+ if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.LOLLIPOP) {
+ p.resolve(false);
+ return;
+ }
+ MediaCodecList mRegularCodecs = new MediaCodecList(MediaCodecList.REGULAR_CODECS);
+ MediaFormat format = MediaFormat.createVideoFormat(mimeType, width, height);
+ String codecName = mRegularCodecs.findDecoderForFormat(format);
+ if (codecName == null) {
+ p.resolve(false);
+ } else {
+ p.resolve(true);
+ }
+ }
+
+
+ @ReactMethod
+ public void isHEVCSupported(Promise p) {
+ isCodecSupported("video/hevc", 1920, 1080, p);
+ }
+
+ public VideoDecoderPropertiesModule(ReactApplicationContext reactContext) {
+ super(reactContext);
+ this.reactContext = reactContext;
+ }
+
+}
diff --git a/android-exoplayer/src/main/java/com/brentvatne/receiver/AudioBecomingNoisyReceiver.java b/android/src/main/java/com/brentvatne/receiver/AudioBecomingNoisyReceiver.java
similarity index 100%
rename from android-exoplayer/src/main/java/com/brentvatne/receiver/AudioBecomingNoisyReceiver.java
rename to android/src/main/java/com/brentvatne/receiver/AudioBecomingNoisyReceiver.java
diff --git a/android-exoplayer/src/main/java/com/brentvatne/receiver/BecomingNoisyListener.java b/android/src/main/java/com/brentvatne/receiver/BecomingNoisyListener.java
similarity index 100%
rename from android-exoplayer/src/main/java/com/brentvatne/receiver/BecomingNoisyListener.java
rename to android/src/main/java/com/brentvatne/receiver/BecomingNoisyListener.java
diff --git a/android-exoplayer/src/main/res/layout/exo_player_control_view.xml b/android/src/main/res/layout/exo_player_control_view.xml
similarity index 90%
rename from android-exoplayer/src/main/res/layout/exo_player_control_view.xml
rename to android/src/main/res/layout/exo_player_control_view.xml
index becee6a9..19440912 100644
--- a/android-exoplayer/src/main/res/layout/exo_player_control_view.xml
+++ b/android/src/main/res/layout/exo_player_control_view.xml
@@ -71,6 +71,14 @@
android:paddingRight="4dp"
android:includeFontPadding="false"
android:textColor="#FFBEBEBE"/>
+
+
diff --git a/android-exoplayer/src/main/res/values/strings.xml b/android/src/main/res/values/strings.xml
similarity index 69%
rename from android-exoplayer/src/main/res/values/strings.xml
rename to android/src/main/res/values/strings.xml
index 4f69ec34..1f037779 100644
--- a/android-exoplayer/src/main/res/values/strings.xml
+++ b/android/src/main/res/values/strings.xml
@@ -8,7 +8,12 @@
Unable to query device decoders
Unable to instantiate decoder %1$s
+
+ Protected content not supported on API levels below 18
Unrecognized media format
+ This device does not support the required DRM scheme
+
+ An unknown DRM error occurred
diff --git a/android/src/main/res/values/styles.xml b/android/src/main/res/values/styles.xml
new file mode 100644
index 00000000..3459d9d6
--- /dev/null
+++ b/android/src/main/res/values/styles.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/docs/DEBUGGING.md b/docs/DEBUGGING.md
new file mode 100644
index 00000000..4ad9fda5
--- /dev/null
+++ b/docs/DEBUGGING.md
@@ -0,0 +1,47 @@
+# Advanced debuging and common issues
+
+### HTTP playback doesn't work or Black Screen on Release build (Android)
+If your video work on Debug mode, but on Release you see only black screen, please, check the link to your video. If you use 'http' protocol there, you will need to add next string to your AndroidManifest.xml file. [Details here](https://developer.android.com/guide/topics/manifest/application-element#usesCleartextTraffic)
+
+```
+
+```
+
+### Decoder Issue (Android)
+
+Devices have a maximum of simulataneous possible playback. It means you have reach this limit. Exoplayer returns: 'Unable to instantiate decoder'
+
+**known issue**: This issue happen really often in debug mode.
+
+## You cannot play clean content (all OS)
+
+Here are the steps to consider before opening a ticket in issue tracker
+
+### Check you can access to remote file
+
+Ensure you can download to manifest / content file with a browser for exemple
+
+### Check another player can read the content
+
+Usually clear playback can be read with all Video player. Then you should ensure content can be played without any issue with another player ([VideoLan/VLC](https://www.videolan.org/vlc/) is a good reference implementation)
+
+## You cannot play protected content (all OS)
+
+### Protected content gives error (token error / access forbidden)
+
+If content is protected with an access token or any other http header, ensure you can access to you data with a wget call or a rest client app. You need to provide all needed access token / authentication parameters.
+
+### Everything seems correct but content cannot be accessed
+
+You need to record network trace to ensure communications with server is correct.
+[Charles proxy](https://www.charlesproxy.com/) is a simple and usefull tool to sniff all http/https calls.
+With this tool you should be able to analyze what is going on with network. You will see all access to content and DRM, audio / vido chuncks, ...
+
+Then try to compare exchanges with previous tests you made.
+
+### It's still not working
+
+You can try to open a ticket now !
diff --git a/docs/DRM.md b/docs/DRM.md
new file mode 100644
index 00000000..d0ce88bf
--- /dev/null
+++ b/docs/DRM.md
@@ -0,0 +1,139 @@
+# DRM
+
+## Provide DRM data (only tested with http/https assets)
+
+You can provide some configuration to allow DRM playback.
+This feature will disable the use of `TextureView` on Android.
+
+DRM object allows this members:
+
+| Property | Type | Default | Platform | Description |
+| --- | --- | --- | --- | --- |
+| [`type`](#type) | DRMType | undefined | iOS/Android | Specifies which type of DRM you are going to use, DRMType is an enum exposed on the JS module ('fairplay', 'playready', ...) |
+| [`licenseServer`](#licenseserver) | string | undefined | iOS/Android | Specifies the license server URL |
+| [`headers`](#headers) | Object | undefined | iOS/Android | Specifies the headers send to the license server URL on license acquisition |
+| [`contentId`](#contentid) | string | undefined | iOS | Specify the content id of the stream, otherwise it will take the host value from `loadingRequest.request.URL.host` (f.e: `skd://testAsset` -> will take `testAsset`) |
+| [`certificateUrl`](#certificateurl) | string | undefined | iOS | Specifies the url to obtain your ios certificate for fairplay, Url to the .cer file |
+| [`base64Certificate`](#base64certificate) | bool | false | iOS | Specifies whether or not the certificate returned by the `certificateUrl` is on base64 |
+| [`getLicense`](#getlicense)| function | undefined | iOS | Rather than setting the `licenseServer` url to get the license, you can manually get the license on the JS part, and send the result to the native part to configure FairplayDRM for the stream |
+
+### `base64Certificate`
+
+Whether or not the certificate url returns it on base64.
+
+Platforms: iOS
+
+### `certificateUrl`
+
+URL to fetch a valid certificate for FairPlay.
+
+Platforms: iOS
+
+### `getLicense`
+
+`licenseServer` and `headers` will be ignored. You will obtain as argument the `SPC` (as ASCII string, you will probably need to convert it to base 64) obtained from your `contentId` + the provided certificate via `[loadingRequest streamingContentKeyRequestDataForApp:certificateData contentIdentifier:contentIdData options:nil error:&spcError];`.
+ You should return on this method a `CKC` in Base64, either by just returning it or returning a `Promise` that resolves with the `CKC`.
+
+With this prop you can override the license acquisition flow, as an example:
+
+```js
+getLicense: (spcString) => {
+ const base64spc = Base64.encode(spcString);
+ const formData = new FormData();
+ formData.append('spc', base64spc);
+ return fetch(`https://license.pallycon.com/ri/licenseManager.do`, {
+ method: 'POST',
+ headers: {
+ 'pallycon-customdata-v2': 'd2VpcmRiYXNlNjRzdHJpbmcgOlAgRGFuaWVsIE1hcmnxbyB3YXMgaGVyZQ==',
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ },
+ body: formData
+ }).then(response => response.text()).then((response) => {
+ return response;
+ }).catch((error) => {
+ console.error('Error', error);
+ });
+}
+```
+
+Platforms: iOS
+
+### `headers`
+
+You can customize headers send to the licenseServer.
+
+Example:
+
+```js
+source={{
+ uri: 'https://media.axprod.net/TestVectors/v7-MultiDRM-SingleKey/Manifest_1080p.mpd',
+}}
+drm={{
+ type: DRMType.WIDEVINE,
+ licenseServer: 'https://drm-widevine-licensing.axtest.net/AcquireLicense',
+ headers: {
+ 'X-AxDRM-Message': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ2ZXJzaW9uIjoxLCJjb21fa2V5X2lkIjoiYjMzNjRlYjUtNTFmNi00YWUzLThjOTgtMzNjZWQ1ZTMxYzc4IiwibWVzc2FnZSI6eyJ0eXBlIjoiZW50aXRsZW1lbnRfbWVzc2FnZSIsImZpcnN0X3BsYXlfZXhwaXJhdGlvbiI6NjAsInBsYXlyZWFkeSI6eyJyZWFsX3RpbWVfZXhwaXJhdGlvbiI6dHJ1ZX0sImtleXMiOlt7ImlkIjoiOWViNDA1MGQtZTQ0Yi00ODAyLTkzMmUtMjdkNzUwODNlMjY2IiwiZW5jcnlwdGVkX2tleSI6ImxLM09qSExZVzI0Y3Iya3RSNzRmbnc9PSJ9XX19.FAbIiPxX8BHi9RwfzD7Yn-wugU19ghrkBFKsaCPrZmU'
+ },
+}}
+```
+
+### `licenseServer`
+
+The URL pointing to the licenseServer that will provide the authorization to play the protected stream.
+
+### `type`
+
+You can specify the DRM type, either by string or using the exported DRMType enum.
+Valid values are, for Android: DRMType.WIDEVINE / DRMType.PLAYREADY / DRMType.CLEARKEY.
+for iOS: DRMType.FAIRPLAY
+
+## Common Usage Scenarios
+
+### Send cookies to license server
+
+You can send Cookies to the license server via `headers` prop. Example:
+
+```js
+drm: {
+ type: DRMType.WIDEVINE
+ licenseServer: 'https://drm-widevine-licensing.axtest.net/AcquireLicense',
+ headers: {
+ 'Cookie': 'PHPSESSID=etcetc; csrftoken=mytoken; _gat=1; foo=bar'
+ },
+}
+```
+
+### Custom License Acquisition (only iOS for now)
+
+```js
+drm: {
+ type: DRMType.FAIRPLAY,
+ getLicense: (spcString) => {
+ const base64spc = Base64.encode(spcString);
+ return fetch('YOUR LICENSE SERVER HERE', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ Accept: 'application/json',
+ },
+ body: JSON.stringify({
+ getFairplayLicense: {
+ foo: 'bar',
+ spcMessage: base64spc,
+ }
+ })
+ })
+ .then(response => response.json())
+ .then((response) => {
+ if (response && response.getFairplayLicenseResponse
+ && response.getFairplayLicenseResponse.ckcResponse) {
+ return response.getFairplayLicenseResponse.ckcResponse;
+ }
+ throw new Error('No correct response');
+ })
+ .catch((error) => {
+ console.error('CKC error', error);
+ });
+ }
+}
+```
diff --git a/docs/PROJECTS.md b/docs/PROJECTS.md
new file mode 100644
index 00000000..fca32018
--- /dev/null
+++ b/docs/PROJECTS.md
@@ -0,0 +1,9 @@
+This page links other open source projects which can be usefull for your player implementation
+
+# UI over react-native-video
+ - [react-native-video-controls](https://github.com/itsnubix/react-native-video-controls): First reference player UI
+ - [react-native-media-console](https://github.com/criszz77/react-native-media-console): React-native-video-controls updated and rewritten in typescript
+ - [react-native-corner-video](https://github.com/Lg0gs/react-native-corner-video): A floating video player
+
+# Other tools
+ - [react-native-music-control](https://github.com/tanguyantoine/react-native-music-control): A toolbox to control player over media session
diff --git a/dom/LICENSE.md b/dom/LICENSE.md
deleted file mode 100644
index aa185c82..00000000
--- a/dom/LICENSE.md
+++ /dev/null
@@ -1,9 +0,0 @@
-MIT License
-
-Copyright (c) 2018 Vincent Riemer
-
-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.
diff --git a/dom/RCTVideo.js b/dom/RCTVideo.js
deleted file mode 100644
index 32128973..00000000
--- a/dom/RCTVideo.js
+++ /dev/null
@@ -1,278 +0,0 @@
-// @flow
-
-import { RCTEvent, RCTView, type RCTBridge } from "react-native-dom";
-import shaka from "shaka-player";
-
-import resizeModes from "./resizeModes";
-import type { VideoSource } from "./types";
-import RCTVideoEvent from "./RCTVideoEvent";
-
-class RCTVideo extends RCTView {
- playPromise: Promise = Promise.resolve();
- progressTimer: number;
- videoElement: HTMLVideoElement;
-
- onEnd: boolean = false;
- onLoad: boolean = false;
- onLoadStart: boolean = false;
- onProgress: boolean = false;
-
- _paused: boolean = false;
- _progressUpdateInterval: number = 250.0;
- _savedVolume: number = 1.0;
-
- constructor(bridge: RCTBridge) {
- super(bridge);
-
- this.eventDispatcher = bridge.getModuleByName("EventDispatcher");
-
- shaka.polyfill.installAll();
-
- this.onEnd = this.onEnd.bind(this);
- this.onLoad = this.onLoad.bind(this);
- this.onLoadStart = this.onLoadStart.bind(this);
- this.onPlay = this.onPlay.bind(this);
- this.onProgress = this.onProgress.bind(this);
-
- this.videoElement = this.initializeVideoElement();
- this.videoElement.addEventListener("ended", this.onEnd);
- this.videoElement.addEventListener("loadeddata", this.onLoad);
- this.videoElement.addEventListener("canplay", this.onReadyForDisplay);
- this.videoElement.addEventListener("loadstart", this.onLoadStart);
- this.videoElement.addEventListener("pause", this.onPause);
- this.videoElement.addEventListener("play", this.onPlay);
- this.player = new shaka.Player(this.videoElement);
-
- this.muted = false;
- this.rate = 1.0;
- this.volume = 1.0;
- this.childContainer.appendChild(this.videoElement);
- }
-
- detachFromView(view: UIView) {
- this.videoElement.removeEventListener("ended", this.onEnd);
- this.videoElement.removeEventListener("loadeddata", this.onLoad);
- this.videoElement.removeEventListener("canplay", this.onReadyForDisplay);
- this.videoElement.removeEventListener("loadstart", this.onLoadStart);
- this.videoElement.removeEventListener("pause", this.onPause);
- this.videoElement.removeEventListener("play", this.onPlay);
-
- this.stopProgressTimer();
- }
-
- initializeVideoElement() {
- const elem = document.createElement("video");
-
- Object.assign(elem.style, {
- display: "block",
- position: "absolute",
- top: "0",
- left: "0",
- width: "100%",
- height: "100%"
- });
-
- return elem;
- }
-
- presentFullscreenPlayer() {
- this.videoElement.webkitRequestFullScreen();
- }
-
- set controls(value: boolean) {
- this.videoElement.controls = value;
- this.videoElement.style.pointerEvents = value ? "auto" : "";
- }
-
- set id(value: string) {
- this.videoElement.id = value;
- }
-
- set muted(value: boolean) {
- this.videoElement.muted = true;
- }
-
- set paused(value: boolean) {
- if (value) {
- this.videoElement.pause();
- } else {
- this.requestPlay();
- }
- this._paused = value;
- }
-
- set progressUpdateInterval(value: number) {
- this._progressUpdateInterval = value;
- this.stopProgressTimer();
- if (!this._paused) {
- this.startProgressTimer();
- }
- }
-
- set rate(value: number) {
- this.videoElement.defaultPlaybackRate = value; // playbackRate doesn't work on Chrome
- this.videoElement.playbackRate = value;
- }
-
- set repeat(value: boolean) {
- this.videoElement.loop = value;
- }
-
- set resizeMode(value: number) {
- switch (value) {
- case resizeModes.ScaleNone: {
- this.videoElement.style.objectFit = "none";
- break;
- }
- case resizeModes.ScaleToFill: {
- this.videoElement.style.objectFit = "fill";
- break;
- }
- case resizeModes.ScaleAspectFit: {
- this.videoElement.style.objectFit = "contain";
- break;
- }
- case resizeModes.ScaleAspectFill: {
- this.videoElement.style.objectFit = "cover";
- break;
- }
- }
- }
-
- set seek(value: number) {
- this.videoElement.currentTime = value;
- }
-
- set source(value: VideoSource) {
- let uri = value.uri;
-
- if (uri.startsWith("blob:")) {
- let blob = this.bridge.blobManager.resolveURL(uri);
- if (blob.type === "text/xml") {
- blob = new Blob([blob], { type: "video/mp4" });
- }
- uri = URL.createObjectURL(blob);
- }
-
- if (!shaka.Player.isBrowserSupported()) { // primarily iOS WebKit
- this.videoElement.setAttribute("src", uri);
- if (!this._paused) {
- this.requestPlay();
- }
- } else {
- this.player.load(uri)
- .then(() => {
- if (!this._paused) {
- this.requestPlay();
- }
- })
- .catch(this.onError);
- }
- }
-
- set volume(value: number) {
- if (value === 0) {
- this.muted = true;
- } else {
- this.videoElement.volume = value;
- this.muted = false;
- }
- }
-
- onEnd = () => {
- this.onProgress();
- this.sendEvent("topVideoEnd", null);
- this.stopProgressTimer();
- }
-
- onError = error => {
- console.warn("topVideoError", error);
- }
-
- onLoad = () => {
- // height & width are safe with audio, will be 0
- const height = this.videoElement.videoHeight;
- const width = this.videoElement.videoWidth;
- const payload = {
- currentPosition: this.videoElement.currentTime,
- duration: this.videoElement.duration,
- naturalSize: {
- width,
- height,
- orientation: width >= height ? "landscape" : "portrait"
- }
- };
- this.sendEvent("topVideoLoad", payload);
- }
-
- onReadyForDisplay = () => {
- this.sendEvent("onReadyForDisplay");
- }
-
- onLoadStart = () => {
- const src = this.videoElement.currentSrc;
- const payload = {
- isNetwork: !src.match(/^https?:\/\/localhost/), // require is served from localhost
- uri: this.videoElement.currentSrc
- };
- this.sendEvent("topVideoLoadStart", payload);
- }
-
- onPause = () => {
- this.stopProgressTimer();
- }
-
- onPlay = () => {
- this.startProgressTimer();
- }
-
- onProgress = () => {
- const payload = {
- currentTime: this.videoElement.currentTime,
- seekableDuration: this.videoElement.duration
- };
- this.sendEvent("topVideoProgress", payload);
- }
-
- onRejectedAutoplay = () => {
- this.sendEvent("topVideoRejectedAutoplay", null);
- }
-
- requestPlay() {
- const playPromise = this.videoElement.play();
- if (playPromise) {
- playPromise
- .then(() => {})
- .catch(e => {
- /* This is likely one of:
- * name: NotAllowedError - autoplay is not supported
- * name: NotSupportedError - format is not supported
- */
- this.onError({ code: e.name, message: e.message });
- });
- }
- }
-
- sendEvent(eventName, payload) {
- const event = new RCTVideoEvent(eventName, this.reactTag, 0, payload);
- this.eventDispatcher.sendEvent(event);
- }
-
- startProgressTimer() {
- if (!this.progressTimer && this._progressUpdateInterval) {
- this.onProgress();
- this.progressTimer = setInterval(this.onProgress, this._progressUpdateInterval);
- }
- }
-
- stopProgressTimer() {
- if (this.progressTimer) {
- clearInterval(this.progressTimer);
- this.progressTimer = null;
- }
- }
-}
-
-customElements.define("rct-video", RCTVideo);
-
-export default RCTVideo;
diff --git a/dom/RCTVideoEvent.js b/dom/RCTVideoEvent.js
deleted file mode 100644
index 699a88c4..00000000
--- a/dom/RCTVideoEvent.js
+++ /dev/null
@@ -1,56 +0,0 @@
-// import { RCTEvent } from "react-native-dom";
-
-interface RCTEvent {
- viewTag: number;
- eventName: string;
- coalescingKey: number;
-
- canCoalesce(): boolean;
- coalesceWithEvent(event: RCTEvent): RCTEvent;
-
- moduleDotMethod(): string;
- arguments(): Array;
- }
-
-export default class RCTVideoEvent implements RCTEvent {
- viewTag: number;
- eventName: string;
- coalescingKey: number;
-
- constructor(
- eventName: string,
- reactTag: number,
- coalescingKey: number,
- data: ?Object
- ) {
- this.viewTag = reactTag;
- this.eventName = eventName;
- this.coalescingKey = coalescingKey;
- this.data = data;
- }
-
- canCoalesce(): boolean {
- return false;
- }
-
- coalesceWithEvent(event: RCTEvent): RCTEvent {
- return;
- }
-
- moduleDotMethod(): string {
- return "RCTEventEmitter.receiveEvent";
- }
-
- arguments(): Array {
- const args = [
- this.viewTag,
- this.eventName,
- this.data
- ];
- return args;
- }
-
- coalescingKey(): number {
- return this.coalescingKey;
- }
-}
diff --git a/dom/RCTVideoManager.js b/dom/RCTVideoManager.js
deleted file mode 100644
index 2eb5309b..00000000
--- a/dom/RCTVideoManager.js
+++ /dev/null
@@ -1,87 +0,0 @@
-// @flow
-
-import { RCTViewManager } from "react-native-dom";
-
-import RCTVideo from "./RCTVideo";
-import resizeModes from "./resizeModes";
-
-import type { VideoSource } from "./types";
-
-class RCTVideoManager extends RCTViewManager {
- static moduleName = "RCTVideoManager";
-
- view() {
- return new RCTVideo(this.bridge);
- }
-
- describeProps() {
- return super
- .describeProps()
- .addBooleanProp("controls", this.setControls)
- .addStringProp("id", this.setId)
- .addBooleanProp("muted", this.setMuted)
- .addBooleanProp("paused", this.setPaused)
- .addNumberProp("progressUpdateInterval", this.setProgressUpdateInterval)
- .addBooleanProp("rate", this.setRate)
- .addBooleanProp("repeat", this.setRepeat)
- .addNumberProp("resizeMode", this.setResizeMode)
- .addNumberProp("seek", this.setSeek)
- .addObjectProp("src", this.setSource)
- .addNumberProp("volume", this.setVolume)
- .addDirectEvent("onVideoEnd")
- .addDirectEvent("onVideoError")
- .addDirectEvent("onVideoLoad")
- .addDirectEvent("onVideoLoadStart")
- .addDirectEvent("onVideoProgress");
- }
-
- dismissFullscreenPlayer() {
- // not currently working
- }
-
- presentFullscreenPlayer() {
- // not currently working
- }
-
- setControls(view: RCTVideo, value: boolean) {
- view.controls = value;
- }
-
- setId(view: RCTVideo, value: string) {
- view.id = value;
- }
-
- setMuted(view: RCTVideo, value: boolean) {
- view.muted = value;
- }
-
- setPaused(view: RCTVideo, value: boolean) {
- view.paused = value;
- }
-
- setRate(view: RCTVideo, value: number) {
- view.rate = value;
- }
-
- setRepeat(view: RCTVideo, value: boolean) {
- view.repeat = value;
- }
-
- setResizeMode(view: RCTVideo, value: number) {
- view.resizeMode = value;
- }
-
- setSeek(view: RCTVideo, value: number) {
- view.seek = value;
- }
-
- setSource(view: RCTVideo, value: VideoSource) {
- view.source = value;
- }
-
- constantsToExport() {
- return { ...resizeModes };
- }
-}
-
-export default RCTVideoManager;
diff --git a/dom/index.js b/dom/index.js
deleted file mode 100644
index d68d5bba..00000000
--- a/dom/index.js
+++ /dev/null
@@ -1,3 +0,0 @@
-// @flow
-
-module.exports = require("./RCTVideoManager");
diff --git a/dom/resizeModes.js b/dom/resizeModes.js
deleted file mode 100644
index 5f569e0d..00000000
--- a/dom/resizeModes.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// @flow
-
-export default {
- ScaleNone: 0,
- ScaleToFill: 1,
- ScaleAspectFit: 2,
- ScaleAspectFill: 3,
-};
diff --git a/dom/types.js b/dom/types.js
deleted file mode 100644
index fe1d1a15..00000000
--- a/dom/types.js
+++ /dev/null
@@ -1,10 +0,0 @@
-// @flow
-
-export type VideoSource = {
- uri: string,
- type: string,
- mainVer: number,
- patchVer: number,
- isNetwork: boolean,
- isAsset: boolean,
-};
diff --git a/examples/basic/.buckconfig b/examples/basic/.buckconfig
deleted file mode 100644
index 934256cb..00000000
--- a/examples/basic/.buckconfig
+++ /dev/null
@@ -1,6 +0,0 @@
-
-[android]
- target = Google Inc.:Google APIs:23
-
-[maven_repositories]
- central = https://repo1.maven.org/maven2
diff --git a/examples/basic/.flowconfig b/examples/basic/.flowconfig
deleted file mode 100644
index bb65654d..00000000
--- a/examples/basic/.flowconfig
+++ /dev/null
@@ -1,58 +0,0 @@
-[ignore]
-; We fork some components by platform
-.*/*[.]android.js
-
-# We fork some components by platform.
-.*/*[.]android.js
-
-# Ignore templates with `@flow` in header
-.*/local-cli/generator.*
-
-# Ignore malformed json
-.*/node_modules/y18n/test/.*\.json
-
-# Ignore the website subdir
-/website/.*
-
-# Ignore BUCK generated dirs
-
-/\.buckd/
-
-; Ignore unexpected extra "@providesModule"
-.*/node_modules/.*/node_modules/fbjs/.*
-
-; Ignore duplicate module providers
-; For RN Apps installed via npm, "Libraries" folder is inside
-; "node_modules/react-native" but in the source repo it is in the root
-.*/Libraries/react-native/React.js
-.*/Libraries/react-native/ReactNative.js
-
-[include]
-
-[libs]
-node_modules/react-native/Libraries/react-native/react-native-interface.js
-node_modules/react-native/flow
-flow/
-
-[options]
-module.system=haste
-
-experimental.strict_type_args=true
-
-munge_underscores=true
-
-module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub'
-
-suppress_type=$FlowIssue
-suppress_type=$FlowFixMe
-suppress_type=$FixMe
-
-suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(3[0-6]\\|[1-2][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)
-suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(3[0-6]\\|1[0-9]\\|[1-2][0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+
-suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy
-
-unsafe.enable_getters_and_setters=true
-
-[version]
-
-^0.36.0
diff --git a/examples/basic/.gitattributes b/examples/basic/.gitattributes
deleted file mode 100644
index d42ff183..00000000
--- a/examples/basic/.gitattributes
+++ /dev/null
@@ -1 +0,0 @@
-*.pbxproj -text
diff --git a/examples/basic/.gitignore b/examples/basic/.gitignore
deleted file mode 100644
index fc13f169..00000000
--- a/examples/basic/.gitignore
+++ /dev/null
@@ -1,53 +0,0 @@
-# OSX
-#
-.DS_Store
-
-# Xcode
-#
-build/
-*.pbxuser
-!default.pbxuser
-*.mode1v3
-!default.mode1v3
-*.mode2v3
-!default.mode2v3
-*.perspectivev3
-!default.perspectivev3
-xcuserdata
-*.xccheckout
-*.moved-aside
-DerivedData
-*.hmap
-*.ipa
-*.xcuserstate
-project.xcworkspace
-
-# Android/IntelliJ
-#
-build/
-.idea
-.gradle
-local.properties
-*.iml
-
-# node.js
-#
-node_modules/
-npm-debug.log
-
-# BUCK
-buck-out/
-\.buckd/
-android/app/libs
-*.keystore
-
-# fastlane
-#
-# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
-# screenshots whenever they are needed.
-# For more information about the recommended setup visit:
-# https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md
-
-fastlane/report.xml
-fastlane/Preview.html
-fastlane/screenshots
diff --git a/examples/basic/.watchmanconfig b/examples/basic/.watchmanconfig
deleted file mode 100644
index 9e26dfee..00000000
--- a/examples/basic/.watchmanconfig
+++ /dev/null
@@ -1 +0,0 @@
-{}
\ No newline at end of file
diff --git a/examples/basic/__tests__/App-test.js b/examples/basic/__tests__/App-test.js
new file mode 100644
index 00000000..d9297fbe
--- /dev/null
+++ b/examples/basic/__tests__/App-test.js
@@ -0,0 +1,14 @@
+/**
+ * @format
+ */
+
+import 'react-native';
+import React from 'react';
+import VideoPlayer from '../src/VideoPlayer';
+
+// Note: test renderer must be required after react-native.
+import renderer from 'react-test-renderer';
+
+it('renders correctly', () => {
+ renderer.create( );
+});
diff --git a/examples/basic/android/app/BUCK b/examples/basic/android/app/BUCK
index 41c624bb..96fa2d68 100644
--- a/examples/basic/android/app/BUCK
+++ b/examples/basic/android/app/BUCK
@@ -1,5 +1,3 @@
-import re
-
# To learn about Buck see [Docs](https://buckbuild.com/).
# To run your application with Buck:
# - install Buck
@@ -10,57 +8,48 @@ import re
# - `buck install -r android/app` - compile, install and run application
#
-lib_deps = []
-for jarfile in glob(['libs/*.jar']):
- name = 'jars__' + re.sub(r'^.*/([^/]+)\.jar$', r'\1', jarfile)
- lib_deps.append(':' + name)
- prebuilt_jar(
- name = name,
- binary_jar = jarfile,
- )
+load(":build_defs.bzl", "create_aar_targets", "create_jar_targets")
-for aarfile in glob(['libs/*.aar']):
- name = 'aars__' + re.sub(r'^.*/([^/]+)\.aar$', r'\1', aarfile)
- lib_deps.append(':' + name)
- android_prebuilt_aar(
- name = name,
- aar = aarfile,
- )
+lib_deps = []
+
+create_aar_targets(glob(["libs/*.aar"]))
+
+create_jar_targets(glob(["libs/*.jar"]))
android_library(
- name = 'all-libs',
- exported_deps = lib_deps
+ name = "all-libs",
+ exported_deps = lib_deps,
)
android_library(
- name = 'app-code',
- srcs = glob([
- 'src/main/java/**/*.java',
- ]),
- deps = [
- ':all-libs',
- ':build_config',
- ':res',
- ],
+ name = "app-code",
+ srcs = glob([
+ "src/main/java/**/*.java",
+ ]),
+ deps = [
+ ":all-libs",
+ ":build_config",
+ ":res",
+ ],
)
android_build_config(
- name = 'build_config',
- package = 'com.videoplayer',
+ name = "build_config",
+ package = "com.videoplayer",
)
android_resource(
- name = 'res',
- res = 'src/main/res',
- package = 'com.videoplayer',
+ name = "res",
+ package = "com.videoplayer",
+ res = "src/main/res",
)
android_binary(
- name = 'app',
- package_type = 'debug',
- manifest = 'src/main/AndroidManifest.xml',
- keystore = '//android/keystores:debug',
- deps = [
- ':app-code',
- ],
+ name = "app",
+ keystore = "//android/keystores:debug",
+ manifest = "src/main/AndroidManifest.xml",
+ package_type = "debug",
+ deps = [
+ ":app-code",
+ ],
)
diff --git a/examples/basic/android/app/build.gradle b/examples/basic/android/app/build.gradle
index 082873d4..31a0e7d1 100644
--- a/examples/basic/android/app/build.gradle
+++ b/examples/basic/android/app/build.gradle
@@ -15,9 +15,14 @@ import com.android.build.OutputFile
* // the name of the generated asset file containing your JS bundle
* bundleAssetName: "index.android.bundle",
*
- * // the entry file for bundle generation
+ * // the entry file for bundle generation. If none specified and
+ * // "index.android.js" exists, it will be used. Otherwise "index.js" is
+ * // default. Can be overridden with ENTRY_FILE environment variable.
* entryFile: "index.android.js",
*
+ * // https://reactnative.dev/docs/performance#enable-the-ram-format
+ * bundleCommand: "ram-bundle",
+ *
* // whether to bundle JS and assets in debug mode
* bundleInDebug: false,
*
@@ -33,6 +38,13 @@ import com.android.build.OutputFile
* // bundleInPaidRelease: true,
* // bundleInBeta: true,
*
+ * // whether to disable dev mode in custom build variants (by default only disabled in release)
+ * // for example: to disable dev mode in the staging build type (if configured)
+ * devDisabledInStaging: true,
+ * // The configuration property can be in the following formats
+ * // 'devDisabledIn${productFlavor}${buildType}'
+ * // 'devDisabledIn${buildType}'
+ *
* // the root of your project, i.e. where "package.json" lives
* root: "../../",
*
@@ -58,7 +70,7 @@ import com.android.build.OutputFile
* inputExcludes: ["android/**", "ios/**"],
*
* // override which node gets called and with what additional arguments
- * nodeExecutableAndArgs: ["node"]
+ * nodeExecutableAndArgs: ["node"],
*
* // supply additional arguments to the packager
* extraPackagerArgs: []
@@ -66,9 +78,9 @@ import com.android.build.OutputFile
*/
project.ext.react = [
- entryFile: "index.android.js",
- enableHermes: false,
+ enableHermes: false, // clean and rebuild if changing
]
+
apply from: "../../node_modules/react-native/react.gradle"
/**
@@ -86,58 +98,117 @@ def enableSeparateBuildPerCPUArchitecture = false
*/
def enableProguardInReleaseBuilds = false
+/**
+ * The preferred build flavor of JavaScriptCore.
+ *
+ * For example, to use the international variant, you can use:
+ * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
+ *
+ * The international variant includes ICU i18n library and necessary data
+ * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that
+ * give correct results when using with locales other than en-US. Note that
+ * this variant is about 6MiB larger per architecture than default.
+ */
+def jscFlavor = 'org.webkit:android-jsc:+'
+
+/**
+ * Whether to enable the Hermes VM.
+ *
+ * This should be set on project.ext.react and mirrored here. If it is not set
+ * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode
+ * and the benefits of using Hermes will therefore be sharply reduced.
+ */
+def enableHermes = project.ext.react.get("enableHermes", false);
+
android {
compileSdkVersion rootProject.ext.compileSdkVersion
- buildToolsVersion rootProject.ext.buildToolsVersion
+
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
+
defaultConfig {
applicationId "com.videoplayer"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0"
- ndk {
- abiFilters "armeabi-v7a", "x86"
- }
+ multiDexEnabled true
+
}
splits {
abi {
reset()
enable enableSeparateBuildPerCPUArchitecture
universalApk false // If true, also generate a universal APK
- include "armeabi-v7a", "x86"
+ include "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
+ }
+ }
+ signingConfigs {
+ debug {
+ storeFile file('debug.keystore')
+ storePassword 'android'
+ keyAlias 'androiddebugkey'
+ keyPassword 'android'
}
}
buildTypes {
+ debug {
+ signingConfig signingConfigs.debug
+ }
release {
+ // Caution! In production, you need to generate your own keystore file.
+ // see https://reactnative.dev/docs/signed-apk-android.
signingConfig signingConfigs.debug
minifyEnabled enableProguardInReleaseBuilds
- matchingFallbacks = ['release', 'debug']
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
}
}
+
// applicationVariants are e.g. debug, release
applicationVariants.all { variant ->
variant.outputs.each { output ->
// For each separate APK per architecture, set a unique version code as described here:
- // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
- def versionCodes = ["armeabi-v7a":1, "x86":2]
+ // https://developer.android.com/studio/build/configure-apk-splits.html
+ def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
def abi = output.getFilter(OutputFile.ABI)
if (abi != null) { // null for the universal-debug, universal-release variants
output.versionCodeOverride =
versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
}
+
}
}
}
dependencies {
- implementation project(':react-native-video')
+ implementation fileTree(dir: "libs", include: ["*.jar"])
+ //noinspection GradleDynamicVersion
implementation "com.facebook.react:react-native:+" // From node_modules
- implementation 'org.webkit:android-jsc:+'
+
+ implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0"
+
+ debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") {
+ exclude group:'com.facebook.fbjni'
+ }
+
+ debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") {
+ exclude group:'com.facebook.flipper'
+ exclude group:'com.squareup.okhttp3', module:'okhttp'
+ }
+
+ debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}") {
+ exclude group:'com.facebook.flipper'
+ }
+
+ if (enableHermes) {
+ def hermesPath = "../../node_modules/hermes-engine/android/";
+ debugImplementation files(hermesPath + "hermes-debug.aar")
+ releaseImplementation files(hermesPath + "hermes-release.aar")
+ } else {
+ implementation jscFlavor
+ }
}
// Run this once to be able to run the application with BUCK
@@ -146,3 +217,5 @@ task copyDownloadableDepsToLibs(type: Copy) {
from configurations.compile
into 'libs'
}
+
+apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)
diff --git a/examples/basic/android/app/build_defs.bzl b/examples/basic/android/app/build_defs.bzl
new file mode 100644
index 00000000..fff270f8
--- /dev/null
+++ b/examples/basic/android/app/build_defs.bzl
@@ -0,0 +1,19 @@
+"""Helper definitions to glob .aar and .jar targets"""
+
+def create_aar_targets(aarfiles):
+ for aarfile in aarfiles:
+ name = "aars__" + aarfile[aarfile.rindex("/") + 1:aarfile.rindex(".aar")]
+ lib_deps.append(":" + name)
+ android_prebuilt_aar(
+ name = name,
+ aar = aarfile,
+ )
+
+def create_jar_targets(jarfiles):
+ for jarfile in jarfiles:
+ name = "jars__" + jarfile[jarfile.rindex("/") + 1:jarfile.rindex(".jar")]
+ lib_deps.append(":" + name)
+ prebuilt_jar(
+ name = name,
+ binary_jar = jarfile,
+ )
diff --git a/examples/basic/android/app/debug.keystore b/examples/basic/android/app/debug.keystore
new file mode 100644
index 00000000..364e105e
Binary files /dev/null and b/examples/basic/android/app/debug.keystore differ
diff --git a/examples/basic/android/app/proguard-rules.pro b/examples/basic/android/app/proguard-rules.pro
index 48361a90..653226b2 100644
--- a/examples/basic/android/app/proguard-rules.pro
+++ b/examples/basic/android/app/proguard-rules.pro
@@ -63,4 +63,4 @@
-keep class sun.misc.Unsafe { *; }
-dontwarn java.nio.file.*
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
--dontwarn okio.**
+-dontwarn okio.**
\ No newline at end of file
diff --git a/examples/basic/android/app/src/debug/AndroidManifest.xml b/examples/basic/android/app/src/debug/AndroidManifest.xml
new file mode 100644
index 00000000..fa26aa56
--- /dev/null
+++ b/examples/basic/android/app/src/debug/AndroidManifest.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
diff --git a/examples/basic/android/app/src/debug/java/com/videoplayer/ReactNativeFlipper.java b/examples/basic/android/app/src/debug/java/com/videoplayer/ReactNativeFlipper.java
new file mode 100644
index 00000000..05c77d34
--- /dev/null
+++ b/examples/basic/android/app/src/debug/java/com/videoplayer/ReactNativeFlipper.java
@@ -0,0 +1,72 @@
+/**
+ * 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.
+ */
+package com.videoplayer;
+
+import android.content.Context;
+import com.facebook.flipper.android.AndroidFlipperClient;
+import com.facebook.flipper.android.utils.FlipperUtils;
+import com.facebook.flipper.core.FlipperClient;
+import com.facebook.flipper.plugins.crashreporter.CrashReporterPlugin;
+import com.facebook.flipper.plugins.databases.DatabasesFlipperPlugin;
+import com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin;
+import com.facebook.flipper.plugins.inspector.DescriptorMapping;
+import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin;
+import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor;
+import com.facebook.flipper.plugins.network.NetworkFlipperPlugin;
+import com.facebook.flipper.plugins.react.ReactFlipperPlugin;
+import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin;
+import com.facebook.react.ReactInstanceManager;
+import com.facebook.react.bridge.ReactContext;
+import com.facebook.react.modules.network.NetworkingModule;
+import okhttp3.OkHttpClient;
+
+public class ReactNativeFlipper {
+ public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {
+ if (FlipperUtils.shouldEnableFlipper(context)) {
+ final FlipperClient client = AndroidFlipperClient.getInstance(context);
+
+ client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults()));
+ client.addPlugin(new ReactFlipperPlugin());
+ client.addPlugin(new DatabasesFlipperPlugin(context));
+ client.addPlugin(new SharedPreferencesFlipperPlugin(context));
+ client.addPlugin(CrashReporterPlugin.getInstance());
+
+ NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin();
+ NetworkingModule.setCustomClientBuilder(
+ new NetworkingModule.CustomClientBuilder() {
+ @Override
+ public void apply(OkHttpClient.Builder builder) {
+ builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
+ }
+ });
+ client.addPlugin(networkFlipperPlugin);
+ client.start();
+
+ // Fresco Plugin needs to ensure that ImagePipelineFactory is initialized
+ // Hence we run if after all native modules have been initialized
+ ReactContext reactContext = reactInstanceManager.getCurrentReactContext();
+ if (reactContext == null) {
+ reactInstanceManager.addReactInstanceEventListener(
+ new ReactInstanceManager.ReactInstanceEventListener() {
+ @Override
+ public void onReactContextInitialized(ReactContext reactContext) {
+ reactInstanceManager.removeReactInstanceEventListener(this);
+ reactContext.runOnNativeModulesQueueThread(
+ new Runnable() {
+ @Override
+ public void run() {
+ client.addPlugin(new FrescoFlipperPlugin());
+ }
+ });
+ }
+ });
+ } else {
+ client.addPlugin(new FrescoFlipperPlugin());
+ }
+ }
+ }
+}
diff --git a/examples/basic/android/app/src/main/AndroidManifest.xml b/examples/basic/android/app/src/main/AndroidManifest.xml
index 96fc8828..6d2862d6 100644
--- a/examples/basic/android/app/src/main/AndroidManifest.xml
+++ b/examples/basic/android/app/src/main/AndroidManifest.xml
@@ -1,24 +1,35 @@
+ package="com.videoplayer">
+
+
+
-
+ android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
+ android:launchMode="singleTask"
+ android:windowSoftInputMode="adjustResize">
+
diff --git a/examples/basic/android/app/src/main/java/com/videoplayer/MainActivity.java b/examples/basic/android/app/src/main/java/com/videoplayer/MainActivity.java
index 7045aa12..2ed27c34 100644
--- a/examples/basic/android/app/src/main/java/com/videoplayer/MainActivity.java
+++ b/examples/basic/android/app/src/main/java/com/videoplayer/MainActivity.java
@@ -4,12 +4,12 @@ import com.facebook.react.ReactActivity;
public class MainActivity extends ReactActivity {
- /**
- * Returns the name of the main component registered from JavaScript.
- * This is used to schedule rendering of the component.
- */
- @Override
- protected String getMainComponentName() {
- return "VideoPlayer";
- }
+ /**
+ * Returns the name of the main component registered from JavaScript. This is used to schedule
+ * rendering of the component.
+ */
+ @Override
+ protected String getMainComponentName() {
+ return "VideoPlayer";
+ }
}
diff --git a/examples/basic/android/app/src/main/java/com/videoplayer/MainApplication.java b/examples/basic/android/app/src/main/java/com/videoplayer/MainApplication.java
index a2698415..c3db7f87 100644
--- a/examples/basic/android/app/src/main/java/com/videoplayer/MainApplication.java
+++ b/examples/basic/android/app/src/main/java/com/videoplayer/MainApplication.java
@@ -1,15 +1,14 @@
package com.videoplayer;
import android.app.Application;
-
+import android.content.Context;
+import com.facebook.react.PackageList;
import com.facebook.react.ReactApplication;
-import com.brentvatne.react.ReactVideoPackage;
+import com.facebook.react.ReactInstanceManager;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
-import com.facebook.react.shell.MainReactPackage;
import com.facebook.soloader.SoLoader;
-
-import java.util.Arrays;
+import java.lang.reflect.InvocationTargetException;
import java.util.List;
public class MainApplication extends Application implements ReactApplication {
@@ -22,10 +21,17 @@ public class MainApplication extends Application implements ReactApplication {
@Override
protected List getPackages() {
- return Arrays.asList(
- new MainReactPackage(),
- new ReactVideoPackage()
- );
+ @SuppressWarnings("UnnecessaryLocalVariable")
+ List packages = new PackageList(this).getPackages();
+ // Packages that cannot be autolinked yet can be added manually here, for
+ // example:
+ // packages.add(new MyReactNativePackage());
+ return packages;
+ }
+
+ @Override
+ protected String getJSMainModuleName() {
+ return "src/index";
}
};
diff --git a/examples/basic/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/examples/basic/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
index cde69bcc..a2f59082 100644
Binary files a/examples/basic/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/examples/basic/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/examples/basic/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/examples/basic/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 00000000..1b523998
Binary files /dev/null and b/examples/basic/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ
diff --git a/examples/basic/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/examples/basic/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
index c133a0cb..ff10afd6 100644
Binary files a/examples/basic/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/examples/basic/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/examples/basic/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/examples/basic/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 00000000..115a4c76
Binary files /dev/null and b/examples/basic/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ
diff --git a/examples/basic/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/examples/basic/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
index bfa42f0e..dcd3cd80 100644
Binary files a/examples/basic/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/examples/basic/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/examples/basic/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/examples/basic/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 00000000..459ca609
Binary files /dev/null and b/examples/basic/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ
diff --git a/examples/basic/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/examples/basic/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
index 324e72cd..8ca12fe0 100644
Binary files a/examples/basic/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/examples/basic/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/examples/basic/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/examples/basic/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 00000000..8e19b410
Binary files /dev/null and b/examples/basic/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ
diff --git a/examples/basic/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/examples/basic/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 00000000..b824ebdd
Binary files /dev/null and b/examples/basic/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/examples/basic/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/examples/basic/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 00000000..4c19a13c
Binary files /dev/null and b/examples/basic/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ
diff --git a/examples/basic/android/app/src/main/res/values/styles.xml b/examples/basic/android/app/src/main/res/values/styles.xml
index 319eb0ca..62fe59fa 100644
--- a/examples/basic/android/app/src/main/res/values/styles.xml
+++ b/examples/basic/android/app/src/main/res/values/styles.xml
@@ -3,6 +3,7 @@
diff --git a/examples/basic/android/build.gradle b/examples/basic/android/build.gradle
index c2191278..f9da7acc 100644
--- a/examples/basic/android/build.gradle
+++ b/examples/basic/android/build.gradle
@@ -2,20 +2,17 @@
buildscript {
ext {
- buildToolsVersion = "28.0.3"
- minSdkVersion = 16
- compileSdkVersion = 28
- targetSdkVersion = 28
- supportLibVersion = "28.0.0"
-
-}
+ buildToolsVersion = "30.0.2"
+ minSdkVersion = 21
+ compileSdkVersion = 31
+ targetSdkVersion = 29
+ }
repositories {
- jcenter()
google()
+ jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:3.4.1'
-
+ classpath("com.android.tools.build:gradle:4.2.2")
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
@@ -24,18 +21,17 @@ buildscript {
allprojects {
repositories {
mavenLocal()
- google()
- maven {
- url "https://jitpack.io"
- }
- jcenter()
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
- url "$rootDir/../node_modules/react-native/android"
+ url("$rootDir/../node_modules/react-native/android")
}
maven {
// Android JSC is installed from npm
url("$rootDir/../node_modules/jsc-android/dist")
}
+
+ google()
+ jcenter()
+ maven { url 'https://www.jitpack.io' }
}
}
diff --git a/examples/basic/android/gradle.properties b/examples/basic/android/gradle.properties
index ccb748f5..3bdbd3d4 100644
--- a/examples/basic/android/gradle.properties
+++ b/examples/basic/android/gradle.properties
@@ -17,5 +17,12 @@
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
+# AndroidX package structure to make it clearer which packages are bundled with the
+# Android operating system, and which are packaged with your app's APK
+# https://developer.android.com/topic/libraries/support-library/androidx-rn
android.useAndroidX=true
-android.enableJetifier=true
\ No newline at end of file
+# Automatically convert third-party libraries to use AndroidX
+android.enableJetifier=true
+
+# Version of flipper SDK to use with React Native
+FLIPPER_VERSION=0.54.0
diff --git a/examples/basic/android/gradle/wrapper/gradle-wrapper.jar b/examples/basic/android/gradle/wrapper/gradle-wrapper.jar
index b5166dad..f3d88b1c 100644
Binary files a/examples/basic/android/gradle/wrapper/gradle-wrapper.jar and b/examples/basic/android/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/examples/basic/android/gradle/wrapper/gradle-wrapper.properties b/examples/basic/android/gradle/wrapper/gradle-wrapper.properties
index 364205fc..6499169f 100644
--- a/examples/basic/android/gradle/wrapper/gradle-wrapper.properties
+++ b/examples/basic/android/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,5 @@
-#Thu Mar 09 08:03:03 PST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.9.2-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip
diff --git a/examples/basic/android/gradlew b/examples/basic/android/gradlew
index 91a7e269..2fe81a7d 100755
--- a/examples/basic/android/gradlew
+++ b/examples/basic/android/gradlew
@@ -1,4 +1,20 @@
-#!/usr/bin/env bash
+#!/usr/bin/env sh
+
+#
+# Copyright 2015 the original author or authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
##############################################################################
##
@@ -6,47 +22,6 @@
##
##############################################################################
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS=""
-
-APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
-
-warn ( ) {
- echo "$*"
-}
-
-die ( ) {
- echo
- echo "$*"
- echo
- exit 1
-}
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-case "`uname`" in
- CYGWIN* )
- cygwin=true
- ;;
- Darwin* )
- darwin=true
- ;;
- MINGW* )
- msys=true
- ;;
-esac
-
-# For Cygwin, ensure paths are in UNIX format before anything is touched.
-if $cygwin ; then
- [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
-fi
-
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
@@ -61,9 +36,49 @@ while [ -h "$PRG" ] ; do
fi
done
SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >&-
+cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
-cd "$SAVED" >&-
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+ echo "$*"
+}
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+ NONSTOP* )
+ nonstop=true
+ ;;
+esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
@@ -90,7 +105,7 @@ location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
@@ -110,10 +125,11 @@ if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin ; then
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+ JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
@@ -138,27 +154,30 @@ if $cygwin ; then
else
eval `echo args$i`="\"$arg\""
fi
- i=$((i+1))
+ i=`expr $i + 1`
done
case $i in
- (0) set -- ;;
- (1) set -- "$args0" ;;
- (2) set -- "$args0" "$args1" ;;
- (3) set -- "$args0" "$args1" "$args2" ;;
- (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
- (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
- (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
- (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
- (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
- (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ 0) set -- ;;
+ 1) set -- "$args0" ;;
+ 2) set -- "$args0" "$args1" ;;
+ 3) set -- "$args0" "$args1" "$args2" ;;
+ 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
-# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
-function splitJvmOpts() {
- JVM_OPTS=("$@")
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
}
-eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
-JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
+APP_ARGS=`save "$@"`
-exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+exec "$JAVACMD" "$@"
diff --git a/examples/basic/android/gradlew.bat b/examples/basic/android/gradlew.bat
index aec99730..62bd9b9c 100644
--- a/examples/basic/android/gradlew.bat
+++ b/examples/basic/android/gradlew.bat
@@ -1,90 +1,103 @@
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS=
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto init
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:init
-@rem Get command-line arguments, handling Windowz variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-if "%@eval[2+2]" == "4" goto 4NT_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-goto execute
-
-:4NT_args
-@rem Get arguments from the 4NT Shell from JP Software
-set CMD_LINE_ARGS=%$
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/examples/basic/android/keystores/BUCK b/examples/basic/android/keystores/BUCK
deleted file mode 100644
index 15da20e6..00000000
--- a/examples/basic/android/keystores/BUCK
+++ /dev/null
@@ -1,8 +0,0 @@
-keystore(
- name = 'debug',
- store = 'debug.keystore',
- properties = 'debug.keystore.properties',
- visibility = [
- 'PUBLIC',
- ],
-)
diff --git a/examples/basic/android/keystores/debug.keystore.properties b/examples/basic/android/keystores/debug.keystore.properties
deleted file mode 100644
index 121bfb49..00000000
--- a/examples/basic/android/keystores/debug.keystore.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-key.store=debug.keystore
-key.alias=androiddebugkey
-key.store.password=android
-key.alias.password=android
diff --git a/examples/basic/android/settings.gradle b/examples/basic/android/settings.gradle
index 5fc7fca4..a78bc672 100644
--- a/examples/basic/android/settings.gradle
+++ b/examples/basic/android/settings.gradle
@@ -1,6 +1,5 @@
rootProject.name = 'VideoPlayer'
-
+apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
include ':react-native-video'
-project(':react-native-video').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-video/android-exoplayer')
-
+project(':react-native-video').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-video/android')
include ':app'
diff --git a/examples/basic/app.json b/examples/basic/app.json
new file mode 100644
index 00000000..77e4fa7e
--- /dev/null
+++ b/examples/basic/app.json
@@ -0,0 +1,4 @@
+{
+ "name": "VideoPlayer",
+ "displayName": "VideoPlayer"
+}
\ No newline at end of file
diff --git a/examples/basic/babel.config.js b/examples/basic/babel.config.js
index f842b77f..6c9b6e99 100644
--- a/examples/basic/babel.config.js
+++ b/examples/basic/babel.config.js
@@ -1,3 +1,16 @@
module.exports = {
presets: ['module:metro-react-native-babel-preset'],
-};
+ plugins: [
+ [
+ 'module-resolver',
+ {
+ extensions: ['.js', '.tsx', '.ts'],
+ root: ['./src'],
+
+ alias: {
+ src: './src',
+ },
+ },
+ ],
+ ],
+};
\ No newline at end of file
diff --git a/examples/basic/index.android.js b/examples/basic/index.android.js
deleted file mode 100644
index 1242ddd0..00000000
--- a/examples/basic/index.android.js
+++ /dev/null
@@ -1,230 +0,0 @@
-'use strict';
-
-import React, {
- Component
-} from 'react';
-
-import {
- AppRegistry,
- StyleSheet,
- Text,
- TouchableOpacity,
- View,
-} from 'react-native';
-
-import Video from 'react-native-video';
-
-class VideoPlayer extends Component {
-
- state = {
- rate: 1,
- volume: 1,
- muted: false,
- resizeMode: 'contain',
- duration: 0.0,
- currentTime: 0.0,
- paused: true,
- };
-
- video: Video;
-
- onLoad = (data) => {
- this.setState({ duration: data.duration });
- };
-
- onProgress = (data) => {
- this.setState({ currentTime: data.currentTime });
- };
-
- onEnd = () => {
- this.setState({ paused: true })
- this.video.seek(0)
- };
-
- onAudioBecomingNoisy = () => {
- this.setState({ paused: true })
- };
-
- onAudioFocusChanged = (event: { hasAudioFocus: boolean }) => {
- this.setState({ paused: !event.hasAudioFocus })
- };
-
- getCurrentTimePercentage() {
- if (this.state.currentTime > 0) {
- return parseFloat(this.state.currentTime) / parseFloat(this.state.duration);
- }
- return 0;
- };
-
- renderRateControl(rate) {
- const isSelected = (this.state.rate === rate);
-
- return (
- { this.setState({ rate }) }}>
-
- {rate}x
-
-
- );
- }
-
- renderResizeModeControl(resizeMode) {
- const isSelected = (this.state.resizeMode === resizeMode);
-
- return (
- { this.setState({ resizeMode }) }}>
-
- {resizeMode}
-
-
- )
- }
-
- renderVolumeControl(volume) {
- const isSelected = (this.state.volume === volume);
-
- return (
- { this.setState({ volume }) }}>
-
- {volume * 100}%
-
-
- )
- }
-
- render() {
- const flexCompleted = this.getCurrentTimePercentage() * 100;
- const flexRemaining = (1 - this.getCurrentTimePercentage()) * 100;
-
- return (
-
- this.setState({ paused: !this.state.paused })}
- >
- { this.video = ref }}
- /* For ExoPlayer */
- /* source={{ uri: 'http://www.youtube.com/api/manifest/dash/id/bf5bb2419360daf1/source/youtube?as=fmp4_audio_clear,fmp4_sd_hd_clear&sparams=ip,ipbits,expire,source,id,as&ip=0.0.0.0&ipbits=0&expire=19000000000&signature=51AF5F39AB0CEC3E5497CD9C900EBFEAECCCB5C7.8506521BFC350652163895D4C26DEE124209AA9E&key=ik0', type: 'mpd' }} */
- source={require('./broadchurch.mp4')}
- style={styles.fullScreen}
- rate={this.state.rate}
- paused={this.state.paused}
- volume={this.state.volume}
- muted={this.state.muted}
- resizeMode={this.state.resizeMode}
- onLoad={this.onLoad}
- onProgress={this.onProgress}
- onEnd={this.onEnd}
- onAudioBecomingNoisy={this.onAudioBecomingNoisy}
- onAudioFocusChanged={this.onAudioFocusChanged}
- repeat={false}
- />
-
-
-
-
-
- {this.renderRateControl(0.25)}
- {this.renderRateControl(0.5)}
- {this.renderRateControl(1.0)}
- {this.renderRateControl(1.5)}
- {this.renderRateControl(2.0)}
-
-
-
- {this.renderVolumeControl(0.5)}
- {this.renderVolumeControl(1)}
- {this.renderVolumeControl(1.5)}
-
-
-
- {this.renderResizeModeControl('cover')}
- {this.renderResizeModeControl('contain')}
- {this.renderResizeModeControl('stretch')}
-
-
-
-
-
-
-
-
-
-
-
- );
- }
-}
-
-
-const styles = StyleSheet.create({
- container: {
- flex: 1,
- justifyContent: 'center',
- alignItems: 'center',
- backgroundColor: 'black',
- },
- fullScreen: {
- position: 'absolute',
- top: 0,
- left: 0,
- bottom: 0,
- right: 0,
- },
- controls: {
- backgroundColor: 'transparent',
- borderRadius: 5,
- position: 'absolute',
- bottom: 20,
- left: 20,
- right: 20,
- },
- progress: {
- flex: 1,
- flexDirection: 'row',
- borderRadius: 3,
- overflow: 'hidden',
- },
- innerProgressCompleted: {
- height: 20,
- backgroundColor: '#cccccc',
- },
- innerProgressRemaining: {
- height: 20,
- backgroundColor: '#2C2C2C',
- },
- generalControls: {
- flex: 1,
- flexDirection: 'row',
- borderRadius: 4,
- overflow: 'hidden',
- paddingBottom: 10,
- },
- rateControl: {
- flex: 1,
- flexDirection: 'row',
- justifyContent: 'center',
- },
- volumeControl: {
- flex: 1,
- flexDirection: 'row',
- justifyContent: 'center',
- },
- resizeModeControl: {
- flex: 1,
- flexDirection: 'row',
- alignItems: 'center',
- justifyContent: 'center',
- },
- controlOption: {
- alignSelf: 'center',
- fontSize: 11,
- color: 'white',
- paddingLeft: 2,
- paddingRight: 2,
- lineHeight: 12,
- },
-});
-
-AppRegistry.registerComponent('VideoPlayer', () => VideoPlayer);
diff --git a/examples/basic/ios/AppDelegate.h b/examples/basic/ios/AppDelegate.h
deleted file mode 100644
index a9654d5e..00000000
--- a/examples/basic/ios/AppDelegate.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * Copyright (c) 2015-present, Facebook, Inc.
- * All rights reserved.
- *
- * This source code is licensed under the BSD-style license found in the
- * LICENSE file in the root directory of this source tree. An additional grant
- * of patent rights can be found in the PATENTS file in the same directory.
- */
-
-#import
-
-@interface AppDelegate : UIResponder
-
-@property (nonatomic, strong) UIWindow *window;
-
-@end
diff --git a/examples/basic/ios/AppDelegate.m b/examples/basic/ios/AppDelegate.m
deleted file mode 100644
index 74dbce6d..00000000
--- a/examples/basic/ios/AppDelegate.m
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * Copyright (c) 2015-present, Facebook, Inc.
- * All rights reserved.
- *
- * This source code is licensed under the BSD-style license found in the
- * LICENSE file in the root directory of this source tree. An additional grant
- * of patent rights can be found in the PATENTS file in the same directory.
- */
-
-#import "AppDelegate.h"
-
-#import "RCTRootView.h"
-
-@implementation AppDelegate
-
-- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
-{
- NSURL *jsCodeLocation;
-
- // Loading JavaScript code - uncomment the one you want.
-
- // OPTION 1
- // Load from development server. Start the server from the repository root:
- //
- // $ npm start
- //
- // To run on device, change `localhost` to the IP address of your computer, and make sure your computer and
- // iOS device are on the same Wi-Fi network.
- jsCodeLocation = [NSURL URLWithString:@"http://localhost:8081/index.ios.bundle?platform=ios&dev=true"];
-
- // OPTION 2
- // Load from pre-bundled file on disk. To re-generate the static bundle, run
- //
- // $ curl 'http://localhost:8081/index.ios.bundle?dev=false&minify=true' -o iOS/main.jsbundle
- //
- // and uncomment the next following line
- // jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
-
- RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
- moduleName:@"VideoPlayer"
- initialProperties: nil
- launchOptions:launchOptions];
-
- self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
- UIViewController *rootViewController = [[UIViewController alloc] init];
- rootViewController.view = rootView;
- self.window.rootViewController = rootViewController;
- [self.window makeKeyAndVisible];
- return YES;
-}
-
-@end
diff --git a/examples/basic/ios/Base.lproj/LaunchScreen.xib b/examples/basic/ios/Base.lproj/LaunchScreen.xib
deleted file mode 100644
index 187346b0..00000000
--- a/examples/basic/ios/Base.lproj/LaunchScreen.xib
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/basic/ios/Images.xcassets/AppIcon.appiconset/Contents.json b/examples/basic/ios/Images.xcassets/AppIcon.appiconset/Contents.json
deleted file mode 100644
index 118c98f7..00000000
--- a/examples/basic/ios/Images.xcassets/AppIcon.appiconset/Contents.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "iphone",
- "size" : "29x29",
- "scale" : "2x"
- },
- {
- "idiom" : "iphone",
- "size" : "29x29",
- "scale" : "3x"
- },
- {
- "idiom" : "iphone",
- "size" : "40x40",
- "scale" : "2x"
- },
- {
- "idiom" : "iphone",
- "size" : "40x40",
- "scale" : "3x"
- },
- {
- "idiom" : "iphone",
- "size" : "60x60",
- "scale" : "2x"
- },
- {
- "idiom" : "iphone",
- "size" : "60x60",
- "scale" : "3x"
- }
- ],
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-}
\ No newline at end of file
diff --git a/examples/basic/ios/Info.plist b/examples/basic/ios/Info.plist
deleted file mode 100644
index 45532a3a..00000000
--- a/examples/basic/ios/Info.plist
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
-
-
- CFBundleDevelopmentRegion
- en
- CFBundleExecutable
- $(EXECUTABLE_NAME)
- CFBundleIdentifier
- $(PRODUCT_BUNDLE_IDENTIFIER)
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundleName
- $(PRODUCT_NAME)
- CFBundlePackageType
- APPL
- CFBundleShortVersionString
- 1.0.0
- CFBundleSignature
- ????
- CFBundleVersion
- 2
- LSApplicationCategoryType
-
- LSRequiresIPhoneOS
-
- NSAppTransportSecurity
-
- NSAllowsArbitraryLoads
-
-
- UILaunchStoryboardName
- LaunchScreen
- UIRequiredDeviceCapabilities
-
- armv7
-
- UISupportedInterfaceOrientations
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
-
- UIViewControllerBasedStatusBarAppearance
-
-
-
diff --git a/examples/basic/ios/Podfile b/examples/basic/ios/Podfile
new file mode 100644
index 00000000..bb45269f
--- /dev/null
+++ b/examples/basic/ios/Podfile
@@ -0,0 +1,26 @@
+require_relative '../node_modules/react-native/scripts/react_native_pods'
+require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
+
+platform :ios, '10.0'
+use_frameworks! :linkage => :static
+
+target 'VideoPlayer' do
+ config = use_native_modules!
+
+ use_react_native!(:path => config["reactNativePath"])
+
+ target 'VideoPlayerTests' do
+ inherit! :complete
+ # Pods for testing
+ end
+
+end
+
+target 'VideoPlayer-tvOS' do
+ # Pods for VideoPlayer-tvOS
+
+ target 'VideoPlayer-tvOSTests' do
+ inherit! :search_paths
+ # Pods for testing
+ end
+end
diff --git a/examples/basic/ios/Podfile.lock b/examples/basic/ios/Podfile.lock
new file mode 100644
index 00000000..242b20a4
--- /dev/null
+++ b/examples/basic/ios/Podfile.lock
@@ -0,0 +1,392 @@
+PODS:
+ - boost-for-react-native (1.63.0)
+ - DoubleConversion (1.1.6)
+ - FBLazyVector (0.63.4)
+ - FBReactNativeSpec (0.63.4):
+ - Folly (= 2020.01.13.00)
+ - RCTRequired (= 0.63.4)
+ - RCTTypeSafety (= 0.63.4)
+ - React-Core (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - ReactCommon/turbomodule/core (= 0.63.4)
+ - Folly (2020.01.13.00):
+ - boost-for-react-native
+ - DoubleConversion
+ - Folly/Default (= 2020.01.13.00)
+ - glog
+ - Folly/Default (2020.01.13.00):
+ - boost-for-react-native
+ - DoubleConversion
+ - glog
+ - glog (0.3.5)
+ - PromisesObjC (2.0.0)
+ - PromisesSwift (2.0.0):
+ - PromisesObjC (= 2.0.0)
+ - RCTRequired (0.63.4)
+ - RCTTypeSafety (0.63.4):
+ - FBLazyVector (= 0.63.4)
+ - Folly (= 2020.01.13.00)
+ - RCTRequired (= 0.63.4)
+ - React-Core (= 0.63.4)
+ - React (0.63.4):
+ - React-Core (= 0.63.4)
+ - React-Core/DevSupport (= 0.63.4)
+ - React-Core/RCTWebSocket (= 0.63.4)
+ - React-RCTActionSheet (= 0.63.4)
+ - React-RCTAnimation (= 0.63.4)
+ - React-RCTBlob (= 0.63.4)
+ - React-RCTImage (= 0.63.4)
+ - React-RCTLinking (= 0.63.4)
+ - React-RCTNetwork (= 0.63.4)
+ - React-RCTSettings (= 0.63.4)
+ - React-RCTText (= 0.63.4)
+ - React-RCTVibration (= 0.63.4)
+ - React-callinvoker (0.63.4)
+ - React-Core (0.63.4):
+ - Folly (= 2020.01.13.00)
+ - glog
+ - React-Core/Default (= 0.63.4)
+ - React-cxxreact (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-jsiexecutor (= 0.63.4)
+ - Yoga
+ - React-Core/CoreModulesHeaders (0.63.4):
+ - Folly (= 2020.01.13.00)
+ - glog
+ - React-Core/Default
+ - React-cxxreact (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-jsiexecutor (= 0.63.4)
+ - Yoga
+ - React-Core/Default (0.63.4):
+ - Folly (= 2020.01.13.00)
+ - glog
+ - React-cxxreact (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-jsiexecutor (= 0.63.4)
+ - Yoga
+ - React-Core/DevSupport (0.63.4):
+ - Folly (= 2020.01.13.00)
+ - glog
+ - React-Core/Default (= 0.63.4)
+ - React-Core/RCTWebSocket (= 0.63.4)
+ - React-cxxreact (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-jsiexecutor (= 0.63.4)
+ - React-jsinspector (= 0.63.4)
+ - Yoga
+ - React-Core/RCTActionSheetHeaders (0.63.4):
+ - Folly (= 2020.01.13.00)
+ - glog
+ - React-Core/Default
+ - React-cxxreact (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-jsiexecutor (= 0.63.4)
+ - Yoga
+ - React-Core/RCTAnimationHeaders (0.63.4):
+ - Folly (= 2020.01.13.00)
+ - glog
+ - React-Core/Default
+ - React-cxxreact (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-jsiexecutor (= 0.63.4)
+ - Yoga
+ - React-Core/RCTBlobHeaders (0.63.4):
+ - Folly (= 2020.01.13.00)
+ - glog
+ - React-Core/Default
+ - React-cxxreact (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-jsiexecutor (= 0.63.4)
+ - Yoga
+ - React-Core/RCTImageHeaders (0.63.4):
+ - Folly (= 2020.01.13.00)
+ - glog
+ - React-Core/Default
+ - React-cxxreact (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-jsiexecutor (= 0.63.4)
+ - Yoga
+ - React-Core/RCTLinkingHeaders (0.63.4):
+ - Folly (= 2020.01.13.00)
+ - glog
+ - React-Core/Default
+ - React-cxxreact (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-jsiexecutor (= 0.63.4)
+ - Yoga
+ - React-Core/RCTNetworkHeaders (0.63.4):
+ - Folly (= 2020.01.13.00)
+ - glog
+ - React-Core/Default
+ - React-cxxreact (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-jsiexecutor (= 0.63.4)
+ - Yoga
+ - React-Core/RCTSettingsHeaders (0.63.4):
+ - Folly (= 2020.01.13.00)
+ - glog
+ - React-Core/Default
+ - React-cxxreact (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-jsiexecutor (= 0.63.4)
+ - Yoga
+ - React-Core/RCTTextHeaders (0.63.4):
+ - Folly (= 2020.01.13.00)
+ - glog
+ - React-Core/Default
+ - React-cxxreact (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-jsiexecutor (= 0.63.4)
+ - Yoga
+ - React-Core/RCTVibrationHeaders (0.63.4):
+ - Folly (= 2020.01.13.00)
+ - glog
+ - React-Core/Default
+ - React-cxxreact (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-jsiexecutor (= 0.63.4)
+ - Yoga
+ - React-Core/RCTWebSocket (0.63.4):
+ - Folly (= 2020.01.13.00)
+ - glog
+ - React-Core/Default (= 0.63.4)
+ - React-cxxreact (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-jsiexecutor (= 0.63.4)
+ - Yoga
+ - React-CoreModules (0.63.4):
+ - FBReactNativeSpec (= 0.63.4)
+ - Folly (= 2020.01.13.00)
+ - RCTTypeSafety (= 0.63.4)
+ - React-Core/CoreModulesHeaders (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-RCTImage (= 0.63.4)
+ - ReactCommon/turbomodule/core (= 0.63.4)
+ - React-cxxreact (0.63.4):
+ - boost-for-react-native (= 1.63.0)
+ - DoubleConversion
+ - Folly (= 2020.01.13.00)
+ - glog
+ - React-callinvoker (= 0.63.4)
+ - React-jsinspector (= 0.63.4)
+ - React-jsi (0.63.4):
+ - boost-for-react-native (= 1.63.0)
+ - DoubleConversion
+ - Folly (= 2020.01.13.00)
+ - glog
+ - React-jsi/Default (= 0.63.4)
+ - React-jsi/Default (0.63.4):
+ - boost-for-react-native (= 1.63.0)
+ - DoubleConversion
+ - Folly (= 2020.01.13.00)
+ - glog
+ - React-jsiexecutor (0.63.4):
+ - DoubleConversion
+ - Folly (= 2020.01.13.00)
+ - glog
+ - React-cxxreact (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-jsinspector (0.63.4)
+ - react-native-video (6.0.0-alpha1):
+ - React-Core
+ - react-native-video/Video (= 6.0.0-alpha1)
+ - react-native-video/Video (6.0.0-alpha1):
+ - PromisesSwift
+ - React-Core
+ - React-RCTActionSheet (0.63.4):
+ - React-Core/RCTActionSheetHeaders (= 0.63.4)
+ - React-RCTAnimation (0.63.4):
+ - FBReactNativeSpec (= 0.63.4)
+ - Folly (= 2020.01.13.00)
+ - RCTTypeSafety (= 0.63.4)
+ - React-Core/RCTAnimationHeaders (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - ReactCommon/turbomodule/core (= 0.63.4)
+ - React-RCTBlob (0.63.4):
+ - FBReactNativeSpec (= 0.63.4)
+ - Folly (= 2020.01.13.00)
+ - React-Core/RCTBlobHeaders (= 0.63.4)
+ - React-Core/RCTWebSocket (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-RCTNetwork (= 0.63.4)
+ - ReactCommon/turbomodule/core (= 0.63.4)
+ - React-RCTImage (0.63.4):
+ - FBReactNativeSpec (= 0.63.4)
+ - Folly (= 2020.01.13.00)
+ - RCTTypeSafety (= 0.63.4)
+ - React-Core/RCTImageHeaders (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - React-RCTNetwork (= 0.63.4)
+ - ReactCommon/turbomodule/core (= 0.63.4)
+ - React-RCTLinking (0.63.4):
+ - FBReactNativeSpec (= 0.63.4)
+ - React-Core/RCTLinkingHeaders (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - ReactCommon/turbomodule/core (= 0.63.4)
+ - React-RCTNetwork (0.63.4):
+ - FBReactNativeSpec (= 0.63.4)
+ - Folly (= 2020.01.13.00)
+ - RCTTypeSafety (= 0.63.4)
+ - React-Core/RCTNetworkHeaders (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - ReactCommon/turbomodule/core (= 0.63.4)
+ - React-RCTSettings (0.63.4):
+ - FBReactNativeSpec (= 0.63.4)
+ - Folly (= 2020.01.13.00)
+ - RCTTypeSafety (= 0.63.4)
+ - React-Core/RCTSettingsHeaders (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - ReactCommon/turbomodule/core (= 0.63.4)
+ - React-RCTText (0.63.4):
+ - React-Core/RCTTextHeaders (= 0.63.4)
+ - React-RCTVibration (0.63.4):
+ - FBReactNativeSpec (= 0.63.4)
+ - Folly (= 2020.01.13.00)
+ - React-Core/RCTVibrationHeaders (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - ReactCommon/turbomodule/core (= 0.63.4)
+ - ReactCommon/turbomodule/core (0.63.4):
+ - DoubleConversion
+ - Folly (= 2020.01.13.00)
+ - glog
+ - React-callinvoker (= 0.63.4)
+ - React-Core (= 0.63.4)
+ - React-cxxreact (= 0.63.4)
+ - React-jsi (= 0.63.4)
+ - RNCPicker (1.16.8):
+ - React-Core
+ - Yoga (1.14.0)
+
+DEPENDENCIES:
+ - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
+ - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
+ - FBReactNativeSpec (from `../node_modules/react-native/Libraries/FBReactNativeSpec`)
+ - Folly (from `../node_modules/react-native/third-party-podspecs/Folly.podspec`)
+ - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
+ - RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`)
+ - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`)
+ - React (from `../node_modules/react-native/`)
+ - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`)
+ - React-Core (from `../node_modules/react-native/`)
+ - React-Core/DevSupport (from `../node_modules/react-native/`)
+ - React-Core/RCTWebSocket (from `../node_modules/react-native/`)
+ - React-CoreModules (from `../node_modules/react-native/React/CoreModules`)
+ - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`)
+ - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`)
+ - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`)
+ - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`)
+ - react-native-video (from `../node_modules/react-native-video`)
+ - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`)
+ - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`)
+ - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`)
+ - React-RCTImage (from `../node_modules/react-native/Libraries/Image`)
+ - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`)
+ - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`)
+ - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`)
+ - React-RCTText (from `../node_modules/react-native/Libraries/Text`)
+ - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`)
+ - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
+ - "RNCPicker (from `../node_modules/@react-native-picker/picker`)"
+ - Yoga (from `../node_modules/react-native/ReactCommon/yoga`)
+
+SPEC REPOS:
+ trunk:
+ - boost-for-react-native
+ - PromisesObjC
+ - PromisesSwift
+
+EXTERNAL SOURCES:
+ DoubleConversion:
+ :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec"
+ FBLazyVector:
+ :path: "../node_modules/react-native/Libraries/FBLazyVector"
+ FBReactNativeSpec:
+ :path: "../node_modules/react-native/Libraries/FBReactNativeSpec"
+ Folly:
+ :podspec: "../node_modules/react-native/third-party-podspecs/Folly.podspec"
+ glog:
+ :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec"
+ RCTRequired:
+ :path: "../node_modules/react-native/Libraries/RCTRequired"
+ RCTTypeSafety:
+ :path: "../node_modules/react-native/Libraries/TypeSafety"
+ React:
+ :path: "../node_modules/react-native/"
+ React-callinvoker:
+ :path: "../node_modules/react-native/ReactCommon/callinvoker"
+ React-Core:
+ :path: "../node_modules/react-native/"
+ React-CoreModules:
+ :path: "../node_modules/react-native/React/CoreModules"
+ React-cxxreact:
+ :path: "../node_modules/react-native/ReactCommon/cxxreact"
+ React-jsi:
+ :path: "../node_modules/react-native/ReactCommon/jsi"
+ React-jsiexecutor:
+ :path: "../node_modules/react-native/ReactCommon/jsiexecutor"
+ React-jsinspector:
+ :path: "../node_modules/react-native/ReactCommon/jsinspector"
+ react-native-video:
+ :path: "../node_modules/react-native-video"
+ React-RCTActionSheet:
+ :path: "../node_modules/react-native/Libraries/ActionSheetIOS"
+ React-RCTAnimation:
+ :path: "../node_modules/react-native/Libraries/NativeAnimation"
+ React-RCTBlob:
+ :path: "../node_modules/react-native/Libraries/Blob"
+ React-RCTImage:
+ :path: "../node_modules/react-native/Libraries/Image"
+ React-RCTLinking:
+ :path: "../node_modules/react-native/Libraries/LinkingIOS"
+ React-RCTNetwork:
+ :path: "../node_modules/react-native/Libraries/Network"
+ React-RCTSettings:
+ :path: "../node_modules/react-native/Libraries/Settings"
+ React-RCTText:
+ :path: "../node_modules/react-native/Libraries/Text"
+ React-RCTVibration:
+ :path: "../node_modules/react-native/Libraries/Vibration"
+ ReactCommon:
+ :path: "../node_modules/react-native/ReactCommon"
+ RNCPicker:
+ :path: "../node_modules/@react-native-picker/picker"
+ Yoga:
+ :path: "../node_modules/react-native/ReactCommon/yoga"
+
+SPEC CHECKSUMS:
+ boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c
+ DoubleConversion: cde416483dac037923206447da6e1454df403714
+ FBLazyVector: 3bb422f41b18121b71783a905c10e58606f7dc3e
+ FBReactNativeSpec: f2c97f2529dd79c083355182cc158c9f98f4bd6e
+ Folly: b73c3869541e86821df3c387eb0af5f65addfab4
+ glog: 40a13f7840415b9a77023fbcae0f1e6f43192af3
+ PromisesObjC: 68159ce6952d93e17b2dfe273b8c40907db5ba58
+ PromisesSwift: e0b2a6433469efb0b83a2b84c62a2abab8e5e5d4
+ RCTRequired: 082f10cd3f905d6c124597fd1c14f6f2655ff65e
+ RCTTypeSafety: 8c9c544ecbf20337d069e4ae7fd9a377aadf504b
+ React: b0a957a2c44da4113b0c4c9853d8387f8e64e615
+ React-callinvoker: c3f44dd3cb195b6aa46621fff95ded79d59043fe
+ React-Core: d3b2a1ac9a2c13c3bcde712d9281fc1c8a5b315b
+ React-CoreModules: 0581ff36cb797da0943d424f69e7098e43e9be60
+ React-cxxreact: c1480d4fda5720086c90df537ee7d285d4c57ac3
+ React-jsi: a0418934cf48f25b485631deb27c64dc40fb4c31
+ React-jsiexecutor: 93bd528844ad21dc07aab1c67cb10abae6df6949
+ React-jsinspector: 58aef7155bc9a9683f5b60b35eccea8722a4f53a
+ react-native-video: 7ce6d16e47b8a6a1ccdc5d9f4f3ce50e42acaf3b
+ React-RCTActionSheet: 89a0ca9f4a06c1f93c26067af074ccdce0f40336
+ React-RCTAnimation: 1bde3ecc0c104c55df246eda516e0deb03c4e49b
+ React-RCTBlob: a97d378b527740cc667e03ebfa183a75231ab0f0
+ React-RCTImage: c1b1f2d3f43a4a528c8946d6092384b5c880d2f0
+ React-RCTLinking: 35ae4ab9dc0410d1fcbdce4d7623194a27214fb2
+ React-RCTNetwork: 29ec2696f8d8cfff7331fac83d3e893c95ef43ae
+ React-RCTSettings: 60f0691bba2074ef394f95d4c2265ec284e0a46a
+ React-RCTText: 5c51df3f08cb9dedc6e790161195d12bac06101c
+ React-RCTVibration: ae4f914cfe8de7d4de95ae1ea6cc8f6315d73d9d
+ ReactCommon: 73d79c7039f473b76db6ff7c6b159c478acbbb3b
+ RNCPicker: 0991c56da7815c0cf946d6f63cf920b25296e5f6
+ Yoga: 4bd86afe9883422a7c4028c00e34790f560923d6
+
+PODFILE CHECKSUM: 51ba394e28c02b1e60e7686b5b2926921af36c49
+
+COCOAPODS: 1.11.2
diff --git a/examples/basic/ios/VideoPlayer-Bridging-Header.h b/examples/basic/ios/VideoPlayer-Bridging-Header.h
new file mode 100644
index 00000000..df4d15b2
--- /dev/null
+++ b/examples/basic/ios/VideoPlayer-Bridging-Header.h
@@ -0,0 +1,12 @@
+//
+// VideoPlayer-Bridging-Header.h
+// VideoPlayer
+//
+// Created by nick fujita on 2/1/22.
+//
+
+#ifndef VideoPlayer_Bridging_Header_h
+#define VideoPlayer_Bridging_Header_h
+
+
+#endif /* VideoPlayer_Bridging_Header_h */
diff --git a/examples/basic/ios/VideoPlayer-tvOS.plist b/examples/basic/ios/VideoPlayer-tvOS/Info.plist
similarity index 100%
rename from examples/basic/ios/VideoPlayer-tvOS.plist
rename to examples/basic/ios/VideoPlayer-tvOS/Info.plist
diff --git a/examples/basic/ios/VideoPlayer-tvOSTests/Info.plist b/examples/basic/ios/VideoPlayer-tvOSTests/Info.plist
new file mode 100644
index 00000000..ba72822e
--- /dev/null
+++ b/examples/basic/ios/VideoPlayer-tvOSTests/Info.plist
@@ -0,0 +1,24 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ BNDL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1
+
+
diff --git a/examples/basic/ios/VideoPlayer.xcodeproj/project.pbxproj b/examples/basic/ios/VideoPlayer.xcodeproj/project.pbxproj
index db5f9a39..3baa0b3e 100644
--- a/examples/basic/ios/VideoPlayer.xcodeproj/project.pbxproj
+++ b/examples/basic/ios/VideoPlayer.xcodeproj/project.pbxproj
@@ -7,422 +7,122 @@
objects = {
/* Begin PBXBuildFile section */
- 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; };
- 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; };
- 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */; };
- 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */; };
- 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; };
- 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C398B91ACF4ADC00677621 /* libRCTLinking.a */; };
- 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */; };
- 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */; };
+ 00E356F31AD99517003FC87E /* VideoPlayerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* VideoPlayerTests.m */; };
+ 012C5B8A27A9666F00485309 /* File.swift in Sources */ = {isa = PBXBuildFile; fileRef = 012C5B8927A9666F00485309 /* File.swift */; };
13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
- 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; };
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
- 146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; };
- 5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */; };
- 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; };
- 8C2A0F841E2560A100E31596 /* libRCTVideo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C2A0F791E25608300E31596 /* libRCTVideo.a */; };
- FA3566AB216D5D7000E01ABD /* libRCTImage-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */; };
- FA3566AC216D5D7000E01ABD /* libRCTLinking-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */; };
- FA3566AD216D5D7000E01ABD /* libRCTNetwork-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */; };
- FA3566AE216D5D7000E01ABD /* libRCTSettings-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */; };
- FA3566AF216D5D7000E01ABD /* libRCTText-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */; };
- FA3566B0216D5D7000E01ABD /* libRCTWebSocket-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */; };
- FA3566C8216D5DA900E01ABD /* libRCTVideo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D1107C542111145500073188 /* libRCTVideo.a */; };
- FA8681B8216D5C6D0010C92A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
- FA8681B9216D5C6D0010C92A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
- FA8681C8216D5C6D0010C92A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
- FA8B47A5216D777200AB07CF /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3EA31DF850E9000B6D8A /* libReact.a */; };
+ 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
+ 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
+ 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
+ 2DCD954D1E0B4F2C00145EB5 /* VideoPlayerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* VideoPlayerTests.m */; };
+ 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
+ 9B1EFF602197E16686E1242F /* Pods_VideoPlayer_tvOSTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 45CE330CC5286CFD45768CB3 /* Pods_VideoPlayer_tvOSTests.framework */; };
+ 9B5D5E89D2011E17AA5A1D01 /* Pods_VideoPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2C39F265DD4E235203DD4B55 /* Pods_VideoPlayer.framework */; };
+ A7D1647E3B839F0605443BE6 /* Pods_VideoPlayer_tvOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 500B6A1A28D58CB3AF579C6F /* Pods_VideoPlayer_tvOS.framework */; };
+ AA06571A8A30E4C38646C7C9 /* Pods_VideoPlayer_VideoPlayerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B828D82CDB8A42C60BF2BFA /* Pods_VideoPlayer_VideoPlayerTests.framework */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
- 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */ = {
+ 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
- containerPortal = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 134814201AA4EA6300B7C361;
- remoteInfo = RCTActionSheet;
+ containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 13B07F861A680F5B00A75B9A;
+ remoteInfo = VideoPlayer;
};
- 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */ = {
+ 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
- containerPortal = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 134814201AA4EA6300B7C361;
- remoteInfo = RCTGeolocation;
- };
- 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 58B5115D1A9E6B3D00147676;
- remoteInfo = RCTImage;
- };
- 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 58B511DB1A9E6C8500147676;
- remoteInfo = RCTNetwork;
- };
- 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 832C81801AAF6DEF007FA2F7;
- remoteInfo = RCTVibration;
- };
- 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 134814201AA4EA6300B7C361;
- remoteInfo = RCTSettings;
- };
- 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 3C86DF461ADF2C930047B81A;
- remoteInfo = RCTWebSocket;
- };
- 146834031AC3E56700842450 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 83CBBA2E1A601D0E00E9B192;
- remoteInfo = React;
- };
- 3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 2D2A283A1D9B042B00D4039D;
- remoteInfo = "RCTImage-tvOS";
- };
- 3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 2D2A28471D9B043800D4039D;
- remoteInfo = "RCTLinking-tvOS";
- };
- 3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 2D2A28541D9B044C00D4039D;
- remoteInfo = "RCTNetwork-tvOS";
- };
- 3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 2D2A28611D9B046600D4039D;
- remoteInfo = "RCTSettings-tvOS";
- };
- 3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 2D2A287B1D9B048500D4039D;
- remoteInfo = "RCTText-tvOS";
- };
- 3DAD3E981DF850E9000B6D8A /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 2D2A28881D9B049200D4039D;
- remoteInfo = "RCTWebSocket-tvOS";
- };
- 3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 2D2A28131D9B038B00D4039D;
- remoteInfo = "React-tvOS";
- };
- 3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 3D3C059A1DE3340900C268FA;
- remoteInfo = yoga;
- };
- 3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 3D3C06751DE3340C00C268FA;
- remoteInfo = "yoga-tvOS";
- };
- 3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 3D3CD9251DE5FBEC00167DC4;
- remoteInfo = cxxreact;
- };
- 3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 3D3CD9321DE5FBEE00167DC4;
- remoteInfo = "cxxreact-tvOS";
- };
- 3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 3D3CD90B1DE5FBD600167DC4;
- remoteInfo = jschelpers;
- };
- 3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 3D3CD9181DE5FBD800167DC4;
- remoteInfo = "jschelpers-tvOS";
- };
- 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 134814201AA4EA6300B7C361;
- remoteInfo = RCTAnimation;
- };
- 5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 2D2A28201D9B03D100D4039D;
- remoteInfo = "RCTAnimation-tvOS";
- };
- 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 134814201AA4EA6300B7C361;
- remoteInfo = RCTLinking;
- };
- 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 58B5119B1A9E6C1200147676;
- remoteInfo = RCTText;
- };
- 8C2A0F781E25608300E31596 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 8C2A0F651E25608300E31596 /* RCTVideo.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 134814201AA4EA6300B7C361;
- remoteInfo = RCTVideo;
- };
- D1107C532111145500073188 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 8C2A0F651E25608300E31596 /* RCTVideo.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 641E28441F0EEC8500443AF6;
- remoteInfo = "RCTVideo-tvOS";
- };
- D1107C592111145500073188 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 3DBE0D001F3B181A0099AA32;
- remoteInfo = fishhook;
- };
- D1107C5B2111145500073188 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 3DBE0D0D1F3B181C0099AA32;
- remoteInfo = "fishhook-tvOS";
- };
- D1107C6D2111145500073188 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = EBF21BDC1FC498900052F4D5;
- remoteInfo = jsinspector;
- };
- D1107C6F2111145500073188 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = EBF21BFA1FC4989A0052F4D5;
- remoteInfo = "jsinspector-tvOS";
- };
- D1107C712111145500073188 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 139D7ECE1E25DB7D00323FB7;
- remoteInfo = "third-party";
- };
- D1107C732111145500073188 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 3D383D3C1EBD27B6005632C8;
- remoteInfo = "third-party-tvOS";
- };
- D1107C752111145500073188 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 139D7E881E25C6D100323FB7;
- remoteInfo = "double-conversion";
- };
- D1107C772111145500073188 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 3D383D621EBD27B9005632C8;
- remoteInfo = "double-conversion-tvOS";
- };
- D1107C792111145500073188 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 9936F3131F5F2E4B0010BF04;
- remoteInfo = privatedata;
- };
- D1107C7B2111145500073188 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 9936F32F1F5F2E5B0010BF04;
- remoteInfo = "privatedata-tvOS";
+ containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 2D02E47A1E0B4A5D006451C7;
+ remoteInfo = "VideoPlayer-tvOS";
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; };
- 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTActionSheet.xcodeproj; path = "../node_modules/react-native/Libraries/ActionSheetIOS/RCTActionSheet.xcodeproj"; sourceTree = ""; };
- 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTGeolocation.xcodeproj; path = "../node_modules/react-native/Libraries/Geolocation/RCTGeolocation.xcodeproj"; sourceTree = ""; };
- 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = "../node_modules/react-native/Libraries/Image/RCTImage.xcodeproj"; sourceTree = ""; };
- 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTNetwork.xcodeproj; path = "../node_modules/react-native/Libraries/Network/RCTNetwork.xcodeproj"; sourceTree = ""; };
- 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTVibration.xcodeproj; path = "../node_modules/react-native/Libraries/Vibration/RCTVibration.xcodeproj"; sourceTree = ""; };
- 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = "../node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj"; sourceTree = ""; };
- 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = "../node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj"; sourceTree = ""; };
+ 00E356EE1AD99517003FC87E /* VideoPlayerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = VideoPlayerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ 00E356F21AD99517003FC87E /* VideoPlayerTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VideoPlayerTests.m; sourceTree = ""; };
+ 012C5B8927A9666F00485309 /* File.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = File.swift; path = VideoPlayer/File.swift; sourceTree = ""; };
+ 012C5B8B27A966CF00485309 /* VideoPlayer-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "VideoPlayer-Bridging-Header.h"; sourceTree = ""; };
+ 0F08E874CF32137C5FEA7CD3 /* Pods-VideoPlayer-tvOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VideoPlayer-tvOSTests.release.xcconfig"; path = "Target Support Files/Pods-VideoPlayer-tvOSTests/Pods-VideoPlayer-tvOSTests.release.xcconfig"; sourceTree = ""; };
13B07F961A680F5B00A75B9A /* VideoPlayer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = VideoPlayer.app; sourceTree = BUILT_PRODUCTS_DIR; };
13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = VideoPlayer/AppDelegate.h; sourceTree = ""; };
13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = VideoPlayer/AppDelegate.m; sourceTree = ""; };
- 13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; };
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = VideoPlayer/Images.xcassets; sourceTree = ""; };
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = VideoPlayer/Info.plist; sourceTree = ""; };
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = VideoPlayer/main.m; sourceTree = ""; };
- 146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "../node_modules/react-native/React/React.xcodeproj"; sourceTree = ""; };
- 39CBB10045CEBFA9BBB9645E /* libPods-VideoPlayer.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-VideoPlayer.a"; sourceTree = BUILT_PRODUCTS_DIR; };
- 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAnimation.xcodeproj; path = "../node_modules/react-native/Libraries/NativeAnimation/RCTAnimation.xcodeproj"; sourceTree = ""; };
- 627363E07276C06249D7CEBF /* libPods-VideoPlayer-tvOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-VideoPlayer-tvOS.a"; sourceTree = BUILT_PRODUCTS_DIR; };
- 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = ""; };
- 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = ""; };
- 8C2A0F651E25608300E31596 /* RCTVideo.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTVideo.xcodeproj; path = "../node_modules/react-native-video/ios/RCTVideo.xcodeproj"; sourceTree = ""; };
- FA8681CE216D5C6D0010C92A /* VideoPlayer-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "VideoPlayer-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; };
- FA8681D0216D5C6E0010C92A /* VideoPlayer-tvOS.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "VideoPlayer-tvOS.plist"; path = "/Users/amishra/Development/react-native-video-nfb/examples/basic/ios/VideoPlayer-tvOS.plist"; sourceTree = ""; };
+ 14F94A5638163C887577920D /* Pods-VideoPlayer-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VideoPlayer-tvOS.release.xcconfig"; path = "Target Support Files/Pods-VideoPlayer-tvOS/Pods-VideoPlayer-tvOS.release.xcconfig"; sourceTree = ""; };
+ 1B6B0FDCD3A9A8AC30563711 /* Pods-VideoPlayer-VideoPlayerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VideoPlayer-VideoPlayerTests.release.xcconfig"; path = "Target Support Files/Pods-VideoPlayer-VideoPlayerTests/Pods-VideoPlayer-VideoPlayerTests.release.xcconfig"; sourceTree = ""; };
+ 2C39F265DD4E235203DD4B55 /* Pods_VideoPlayer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_VideoPlayer.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 2D02E47B1E0B4A5D006451C7 /* VideoPlayer-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "VideoPlayer-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 2D02E4901E0B4A5D006451C7 /* VideoPlayer-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "VideoPlayer-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 45CE330CC5286CFD45768CB3 /* Pods_VideoPlayer_tvOSTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_VideoPlayer_tvOSTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 500B6A1A28D58CB3AF579C6F /* Pods_VideoPlayer_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_VideoPlayer_tvOS.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 5933B738F6C2A0A8C1CC0234 /* Pods-VideoPlayer-VideoPlayerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VideoPlayer-VideoPlayerTests.debug.xcconfig"; path = "Target Support Files/Pods-VideoPlayer-VideoPlayerTests/Pods-VideoPlayer-VideoPlayerTests.debug.xcconfig"; sourceTree = ""; };
+ 5B828D82CDB8A42C60BF2BFA /* Pods_VideoPlayer_VideoPlayerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_VideoPlayer_VideoPlayerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 72ECC70C444201AEE7C9332F /* Pods-VideoPlayer.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VideoPlayer.debug.xcconfig"; path = "Target Support Files/Pods-VideoPlayer/Pods-VideoPlayer.debug.xcconfig"; sourceTree = ""; };
+ 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = VideoPlayer/LaunchScreen.storyboard; sourceTree = ""; };
+ 960F0735700C97E215D22AD0 /* Pods-VideoPlayer.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VideoPlayer.release.xcconfig"; path = "Target Support Files/Pods-VideoPlayer/Pods-VideoPlayer.release.xcconfig"; sourceTree = ""; };
+ CEA7B85E17314C1BE0F74AE7 /* Pods-VideoPlayer-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VideoPlayer-tvOS.debug.xcconfig"; path = "Target Support Files/Pods-VideoPlayer-tvOS/Pods-VideoPlayer-tvOS.debug.xcconfig"; sourceTree = ""; };
+ E048F2A1D012F1BB4C6925E8 /* Pods-VideoPlayer-tvOSTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VideoPlayer-tvOSTests.debug.xcconfig"; path = "Target Support Files/Pods-VideoPlayer-tvOSTests/Pods-VideoPlayer-tvOSTests.debug.xcconfig"; sourceTree = ""; };
+ ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
+ ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
+ 00E356EB1AD99517003FC87E /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ AA06571A8A30E4C38646C7C9 /* Pods_VideoPlayer_VideoPlayerTests.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 146834051AC3E58100842450 /* libReact.a in Frameworks */,
- 5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */,
- 8C2A0F841E2560A100E31596 /* libRCTVideo.a in Frameworks */,
- 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */,
- 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */,
- 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */,
- 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */,
- 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */,
- 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */,
- 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */,
- 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */,
- 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */,
+ 9B5D5E89D2011E17AA5A1D01 /* Pods_VideoPlayer.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
- FA8681BA216D5C6D0010C92A /* Frameworks */ = {
+ 2D02E4781E0B4A5D006451C7 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- FA8B47A5216D777200AB07CF /* libReact.a in Frameworks */,
- FA3566AB216D5D7000E01ABD /* libRCTImage-tvOS.a in Frameworks */,
- FA3566AC216D5D7000E01ABD /* libRCTLinking-tvOS.a in Frameworks */,
- FA3566AD216D5D7000E01ABD /* libRCTNetwork-tvOS.a in Frameworks */,
- FA3566AE216D5D7000E01ABD /* libRCTSettings-tvOS.a in Frameworks */,
- FA3566AF216D5D7000E01ABD /* libRCTText-tvOS.a in Frameworks */,
- FA3566B0216D5D7000E01ABD /* libRCTWebSocket-tvOS.a in Frameworks */,
- FA3566C8216D5DA900E01ABD /* libRCTVideo.a in Frameworks */,
+ A7D1647E3B839F0605443BE6 /* Pods_VideoPlayer_tvOS.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2D02E48D1E0B4A5D006451C7 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 9B1EFF602197E16686E1242F /* Pods_VideoPlayer_tvOSTests.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
- 00C302A81ABCB8CE00DB3ED1 /* Products */ = {
+ 00E356EF1AD99517003FC87E /* VideoPlayerTests */ = {
isa = PBXGroup;
children = (
- 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */,
+ 00E356F21AD99517003FC87E /* VideoPlayerTests.m */,
+ 00E356F01AD99517003FC87E /* Supporting Files */,
);
- name = Products;
+ path = VideoPlayerTests;
sourceTree = "";
};
- 00C302B61ABCB90400DB3ED1 /* Products */ = {
+ 00E356F01AD99517003FC87E /* Supporting Files */ = {
isa = PBXGroup;
children = (
- 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */,
+ 00E356F11AD99517003FC87E /* Info.plist */,
);
- name = Products;
- sourceTree = "";
- };
- 00C302BC1ABCB91800DB3ED1 /* Products */ = {
- isa = PBXGroup;
- children = (
- 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */,
- 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */,
- );
- name = Products;
- sourceTree = "";
- };
- 00C302D41ABCB9D200DB3ED1 /* Products */ = {
- isa = PBXGroup;
- children = (
- 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */,
- 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */,
- );
- name = Products;
- sourceTree = "";
- };
- 00C302E01ABCB9EE00DB3ED1 /* Products */ = {
- isa = PBXGroup;
- children = (
- 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */,
- );
- name = Products;
- sourceTree = "";
- };
- 139105B71AF99BAD00B5F7CC /* Products */ = {
- isa = PBXGroup;
- children = (
- 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */,
- 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */,
- );
- name = Products;
- sourceTree = "";
- };
- 139FDEE71B06529A00C62182 /* Products */ = {
- isa = PBXGroup;
- children = (
- 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */,
- 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */,
- D1107C5A2111145500073188 /* libfishhook.a */,
- D1107C5C2111145500073188 /* libfishhook-tvOS.a */,
- );
- name = Products;
+ name = "Supporting Files";
sourceTree = "";
};
13B07FAE1A68108700A75B9A /* VideoPlayer */ = {
@@ -431,182 +131,192 @@
008F07F21AC5B25A0029DE68 /* main.jsbundle */,
13B07FAF1A68108700A75B9A /* AppDelegate.h */,
13B07FB01A68108700A75B9A /* AppDelegate.m */,
+ 012C5B8927A9666F00485309 /* File.swift */,
+ 012C5B8B27A966CF00485309 /* VideoPlayer-Bridging-Header.h */,
13B07FB51A68108700A75B9A /* Images.xcassets */,
13B07FB61A68108700A75B9A /* Info.plist */,
- 13B07FB11A68108700A75B9A /* LaunchScreen.xib */,
+ 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */,
13B07FB71A68108700A75B9A /* main.m */,
);
name = VideoPlayer;
sourceTree = "";
};
- 146834001AC3E56700842450 /* Products */ = {
+ 2D16E6871FA4F8E400B85C8A /* Frameworks */ = {
isa = PBXGroup;
children = (
- 146834041AC3E56700842450 /* libReact.a */,
- 3DAD3EA31DF850E9000B6D8A /* libReact.a */,
- 3DAD3EA51DF850E9000B6D8A /* libyoga.a */,
- 3DAD3EA71DF850E9000B6D8A /* libyoga.a */,
- 3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */,
- 3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */,
- 3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */,
- 3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */,
- D1107C6E2111145500073188 /* libjsinspector.a */,
- D1107C702111145500073188 /* libjsinspector-tvOS.a */,
- D1107C722111145500073188 /* libthird-party.a */,
- D1107C742111145500073188 /* libthird-party.a */,
- D1107C762111145500073188 /* libdouble-conversion.a */,
- D1107C782111145500073188 /* libdouble-conversion.a */,
- D1107C7A2111145500073188 /* libprivatedata.a */,
- D1107C7C2111145500073188 /* libprivatedata-tvOS.a */,
+ ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
+ ED2971642150620600B7C4FE /* JavaScriptCore.framework */,
+ 2C39F265DD4E235203DD4B55 /* Pods_VideoPlayer.framework */,
+ 5B828D82CDB8A42C60BF2BFA /* Pods_VideoPlayer_VideoPlayerTests.framework */,
+ 500B6A1A28D58CB3AF579C6F /* Pods_VideoPlayer_tvOS.framework */,
+ 45CE330CC5286CFD45768CB3 /* Pods_VideoPlayer_tvOSTests.framework */,
);
- name = Products;
- sourceTree = "";
- };
- 5E91572E1DD0AC6500FF2AA8 /* Products */ = {
- isa = PBXGroup;
- children = (
- 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */,
- 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */,
- );
- name = Products;
- sourceTree = "";
- };
- 78C398B11ACF4ADC00677621 /* Products */ = {
- isa = PBXGroup;
- children = (
- 78C398B91ACF4ADC00677621 /* libRCTLinking.a */,
- 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */,
- );
- name = Products;
+ name = Frameworks;
sourceTree = "";
};
832341AE1AAA6A7D00B99B32 /* Libraries */ = {
isa = PBXGroup;
children = (
- 8C2A0F651E25608300E31596 /* RCTVideo.xcodeproj */,
- 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */,
- 146833FF1AC3E56700842450 /* React.xcodeproj */,
- 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */,
- 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */,
- 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */,
- 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */,
- 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */,
- 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */,
- 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */,
- 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */,
- 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */,
);
name = Libraries;
sourceTree = "";
};
- 832341B11AAA6A8300B99B32 /* Products */ = {
- isa = PBXGroup;
- children = (
- 832341B51AAA6A8300B99B32 /* libRCTText.a */,
- 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */,
- );
- name = Products;
- sourceTree = "";
- };
83CBB9F61A601CBA00E9B192 = {
isa = PBXGroup;
children = (
- FA8681CF216D5C6D0010C92A /* Resources-iPad */,
13B07FAE1A68108700A75B9A /* VideoPlayer */,
832341AE1AAA6A7D00B99B32 /* Libraries */,
+ 00E356EF1AD99517003FC87E /* VideoPlayerTests */,
83CBBA001A601CBA00E9B192 /* Products */,
- FA35669C216D5D7000E01ABD /* Frameworks */,
+ 2D16E6871FA4F8E400B85C8A /* Frameworks */,
+ B09E1827D988A8F7B7FABCD7 /* Pods */,
);
indentWidth = 2;
sourceTree = "";
tabWidth = 2;
+ usesTabs = 0;
};
83CBBA001A601CBA00E9B192 /* Products */ = {
isa = PBXGroup;
children = (
13B07F961A680F5B00A75B9A /* VideoPlayer.app */,
- FA8681CE216D5C6D0010C92A /* VideoPlayer-tvOS.app */,
+ 00E356EE1AD99517003FC87E /* VideoPlayerTests.xctest */,
+ 2D02E47B1E0B4A5D006451C7 /* VideoPlayer-tvOS.app */,
+ 2D02E4901E0B4A5D006451C7 /* VideoPlayer-tvOSTests.xctest */,
);
name = Products;
sourceTree = "";
};
- 8C2A0F661E25608300E31596 /* Products */ = {
+ B09E1827D988A8F7B7FABCD7 /* Pods */ = {
isa = PBXGroup;
children = (
- 8C2A0F791E25608300E31596 /* libRCTVideo.a */,
- D1107C542111145500073188 /* libRCTVideo.a */,
+ 72ECC70C444201AEE7C9332F /* Pods-VideoPlayer.debug.xcconfig */,
+ 960F0735700C97E215D22AD0 /* Pods-VideoPlayer.release.xcconfig */,
+ 5933B738F6C2A0A8C1CC0234 /* Pods-VideoPlayer-VideoPlayerTests.debug.xcconfig */,
+ 1B6B0FDCD3A9A8AC30563711 /* Pods-VideoPlayer-VideoPlayerTests.release.xcconfig */,
+ CEA7B85E17314C1BE0F74AE7 /* Pods-VideoPlayer-tvOS.debug.xcconfig */,
+ 14F94A5638163C887577920D /* Pods-VideoPlayer-tvOS.release.xcconfig */,
+ E048F2A1D012F1BB4C6925E8 /* Pods-VideoPlayer-tvOSTests.debug.xcconfig */,
+ 0F08E874CF32137C5FEA7CD3 /* Pods-VideoPlayer-tvOSTests.release.xcconfig */,
);
- name = Products;
- sourceTree = "";
- };
- FA35669C216D5D7000E01ABD /* Frameworks */ = {
- isa = PBXGroup;
- children = (
- 39CBB10045CEBFA9BBB9645E /* libPods-VideoPlayer.a */,
- 627363E07276C06249D7CEBF /* libPods-VideoPlayer-tvOS.a */,
- );
- name = Frameworks;
- sourceTree = "";
- };
- FA8681CF216D5C6D0010C92A /* Resources-iPad */ = {
- isa = PBXGroup;
- children = (
- FA8681D0216D5C6E0010C92A /* VideoPlayer-tvOS.plist */,
- );
- name = "Resources-iPad";
+ path = Pods;
sourceTree = "";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
+ 00E356ED1AD99517003FC87E /* VideoPlayerTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "VideoPlayerTests" */;
+ buildPhases = (
+ 664B3F472CE9752E13793E66 /* [CP] Check Pods Manifest.lock */,
+ 00E356EA1AD99517003FC87E /* Sources */,
+ 00E356EB1AD99517003FC87E /* Frameworks */,
+ 00E356EC1AD99517003FC87E /* Resources */,
+ 9930F79A083DBC2465E15F7C /* [CP] Copy Pods Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 00E356F51AD99517003FC87E /* PBXTargetDependency */,
+ );
+ name = VideoPlayerTests;
+ productName = VideoPlayerTests;
+ productReference = 00E356EE1AD99517003FC87E /* VideoPlayerTests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
13B07F861A680F5B00A75B9A /* VideoPlayer */ = {
isa = PBXNativeTarget;
buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "VideoPlayer" */;
buildPhases = (
+ C727CDFD7820FD2B492BFCE2 /* [CP] Check Pods Manifest.lock */,
+ FD10A7F022414F080027D42C /* Start Packager */,
13B07F871A680F5B00A75B9A /* Sources */,
13B07F8C1A680F5B00A75B9A /* Frameworks */,
13B07F8E1A680F5B00A75B9A /* Resources */,
00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
+ 617FE7057887EE750FF2A943 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
dependencies = (
);
name = VideoPlayer;
- productName = "Hello World";
+ productName = VideoPlayer;
productReference = 13B07F961A680F5B00A75B9A /* VideoPlayer.app */;
productType = "com.apple.product-type.application";
};
- FA8681B6216D5C6D0010C92A /* VideoPlayer-tvOS */ = {
+ 2D02E47A1E0B4A5D006451C7 /* VideoPlayer-tvOS */ = {
isa = PBXNativeTarget;
- buildConfigurationList = FA8681CB216D5C6D0010C92A /* Build configuration list for PBXNativeTarget "VideoPlayer-tvOS" */;
+ buildConfigurationList = 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "VideoPlayer-tvOS" */;
buildPhases = (
- FA8681B7216D5C6D0010C92A /* Sources */,
- FA8681BA216D5C6D0010C92A /* Frameworks */,
- FA8681C7216D5C6D0010C92A /* Resources */,
- FA8681CA216D5C6D0010C92A /* Bundle React Native code and images */,
+ 65451BD1F0D11FF4A48FC837 /* [CP] Check Pods Manifest.lock */,
+ FD10A7F122414F3F0027D42C /* Start Packager */,
+ 2D02E4771E0B4A5D006451C7 /* Sources */,
+ 2D02E4781E0B4A5D006451C7 /* Frameworks */,
+ 2D02E4791E0B4A5D006451C7 /* Resources */,
+ 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */,
);
buildRules = (
);
dependencies = (
);
name = "VideoPlayer-tvOS";
- productName = "Hello World";
- productReference = FA8681CE216D5C6D0010C92A /* VideoPlayer-tvOS.app */;
+ productName = "VideoPlayer-tvOS";
+ productReference = 2D02E47B1E0B4A5D006451C7 /* VideoPlayer-tvOS.app */;
productType = "com.apple.product-type.application";
};
+ 2D02E48F1E0B4A5D006451C7 /* VideoPlayer-tvOSTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "VideoPlayer-tvOSTests" */;
+ buildPhases = (
+ E1CD132A3DDBBC2FFC81826F /* [CP] Check Pods Manifest.lock */,
+ 2D02E48C1E0B4A5D006451C7 /* Sources */,
+ 2D02E48D1E0B4A5D006451C7 /* Frameworks */,
+ 2D02E48E1E0B4A5D006451C7 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */,
+ );
+ name = "VideoPlayer-tvOSTests";
+ productName = "VideoPlayer-tvOSTests";
+ productReference = 2D02E4901E0B4A5D006451C7 /* VideoPlayer-tvOSTests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
/* End PBXNativeTarget section */
/* Begin PBXProject section */
83CBB9F71A601CBA00E9B192 /* Project object */ = {
isa = PBXProject;
attributes = {
- LastUpgradeCheck = 0610;
- ORGANIZATIONNAME = Facebook;
+ LastUpgradeCheck = 1130;
+ TargetAttributes = {
+ 00E356ED1AD99517003FC87E = {
+ CreatedOnToolsVersion = 6.2;
+ LastSwiftMigration = 1310;
+ TestTargetID = 13B07F861A680F5B00A75B9A;
+ };
+ 13B07F861A680F5B00A75B9A = {
+ LastSwiftMigration = 1310;
+ };
+ 2D02E47A1E0B4A5D006451C7 = {
+ CreatedOnToolsVersion = 8.2.1;
+ LastSwiftMigration = 1310;
+ ProvisioningStyle = Automatic;
+ };
+ 2D02E48F1E0B4A5D006451C7 = {
+ CreatedOnToolsVersion = 8.2.1;
+ LastSwiftMigration = 1310;
+ ProvisioningStyle = Automatic;
+ TestTargetID = 2D02E47A1E0B4A5D006451C7;
+ };
+ };
};
buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "VideoPlayer" */;
compatibilityVersion = "Xcode 3.2";
- developmentRegion = English;
+ developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
@@ -615,341 +325,45 @@
mainGroup = 83CBB9F61A601CBA00E9B192;
productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
projectDirPath = "";
- projectReferences = (
- {
- ProductGroup = 00C302A81ABCB8CE00DB3ED1 /* Products */;
- ProjectRef = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */;
- },
- {
- ProductGroup = 5E91572E1DD0AC6500FF2AA8 /* Products */;
- ProjectRef = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */;
- },
- {
- ProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */;
- ProjectRef = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */;
- },
- {
- ProductGroup = 00C302BC1ABCB91800DB3ED1 /* Products */;
- ProjectRef = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */;
- },
- {
- ProductGroup = 78C398B11ACF4ADC00677621 /* Products */;
- ProjectRef = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */;
- },
- {
- ProductGroup = 00C302D41ABCB9D200DB3ED1 /* Products */;
- ProjectRef = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */;
- },
- {
- ProductGroup = 139105B71AF99BAD00B5F7CC /* Products */;
- ProjectRef = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */;
- },
- {
- ProductGroup = 832341B11AAA6A8300B99B32 /* Products */;
- ProjectRef = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */;
- },
- {
- ProductGroup = 00C302E01ABCB9EE00DB3ED1 /* Products */;
- ProjectRef = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */;
- },
- {
- ProductGroup = 8C2A0F661E25608300E31596 /* Products */;
- ProjectRef = 8C2A0F651E25608300E31596 /* RCTVideo.xcodeproj */;
- },
- {
- ProductGroup = 139FDEE71B06529A00C62182 /* Products */;
- ProjectRef = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;
- },
- {
- ProductGroup = 146834001AC3E56700842450 /* Products */;
- ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */;
- },
- );
projectRoot = "";
targets = (
13B07F861A680F5B00A75B9A /* VideoPlayer */,
- FA8681B6216D5C6D0010C92A /* VideoPlayer-tvOS */,
+ 00E356ED1AD99517003FC87E /* VideoPlayerTests */,
+ 2D02E47A1E0B4A5D006451C7 /* VideoPlayer-tvOS */,
+ 2D02E48F1E0B4A5D006451C7 /* VideoPlayer-tvOSTests */,
);
};
/* End PBXProject section */
-/* Begin PBXReferenceProxy section */
- 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = libRCTActionSheet.a;
- remoteRef = 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = libRCTGeolocation.a;
- remoteRef = 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = libRCTImage.a;
- remoteRef = 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = libRCTNetwork.a;
- remoteRef = 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = libRCTVibration.a;
- remoteRef = 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = libRCTSettings.a;
- remoteRef = 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = libRCTWebSocket.a;
- remoteRef = 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- 146834041AC3E56700842450 /* libReact.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = libReact.a;
- remoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = "libRCTImage-tvOS.a";
- remoteRef = 3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = "libRCTLinking-tvOS.a";
- remoteRef = 3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = "libRCTNetwork-tvOS.a";
- remoteRef = 3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = "libRCTSettings-tvOS.a";
- remoteRef = 3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = "libRCTText-tvOS.a";
- remoteRef = 3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = "libRCTWebSocket-tvOS.a";
- remoteRef = 3DAD3E981DF850E9000B6D8A /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- 3DAD3EA31DF850E9000B6D8A /* libReact.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = libReact.a;
- remoteRef = 3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- 3DAD3EA51DF850E9000B6D8A /* libyoga.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = libyoga.a;
- remoteRef = 3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- 3DAD3EA71DF850E9000B6D8A /* libyoga.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = libyoga.a;
- remoteRef = 3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- 3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = libcxxreact.a;
- remoteRef = 3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- 3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = libcxxreact.a;
- remoteRef = 3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- 3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = libjschelpers.a;
- remoteRef = 3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- 3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = libjschelpers.a;
- remoteRef = 3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = libRCTAnimation.a;
- remoteRef = 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = libRCTAnimation.a;
- remoteRef = 5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- 78C398B91ACF4ADC00677621 /* libRCTLinking.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = libRCTLinking.a;
- remoteRef = 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- 832341B51AAA6A8300B99B32 /* libRCTText.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = libRCTText.a;
- remoteRef = 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- 8C2A0F791E25608300E31596 /* libRCTVideo.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = libRCTVideo.a;
- remoteRef = 8C2A0F781E25608300E31596 /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- D1107C542111145500073188 /* libRCTVideo.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = libRCTVideo.a;
- remoteRef = D1107C532111145500073188 /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- D1107C5A2111145500073188 /* libfishhook.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = libfishhook.a;
- remoteRef = D1107C592111145500073188 /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- D1107C5C2111145500073188 /* libfishhook-tvOS.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = "libfishhook-tvOS.a";
- remoteRef = D1107C5B2111145500073188 /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- D1107C6E2111145500073188 /* libjsinspector.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = libjsinspector.a;
- remoteRef = D1107C6D2111145500073188 /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- D1107C702111145500073188 /* libjsinspector-tvOS.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = "libjsinspector-tvOS.a";
- remoteRef = D1107C6F2111145500073188 /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- D1107C722111145500073188 /* libthird-party.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = "libthird-party.a";
- remoteRef = D1107C712111145500073188 /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- D1107C742111145500073188 /* libthird-party.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = "libthird-party.a";
- remoteRef = D1107C732111145500073188 /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- D1107C762111145500073188 /* libdouble-conversion.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = "libdouble-conversion.a";
- remoteRef = D1107C752111145500073188 /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- D1107C782111145500073188 /* libdouble-conversion.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = "libdouble-conversion.a";
- remoteRef = D1107C772111145500073188 /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- D1107C7A2111145500073188 /* libprivatedata.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = libprivatedata.a;
- remoteRef = D1107C792111145500073188 /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- D1107C7C2111145500073188 /* libprivatedata-tvOS.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = "libprivatedata-tvOS.a";
- remoteRef = D1107C7B2111145500073188 /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
-/* End PBXReferenceProxy section */
-
/* Begin PBXResourcesBuildPhase section */
+ 00E356EC1AD99517003FC87E /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
13B07F8E1A680F5B00A75B9A /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
+ 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */,
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
- 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
- FA8681C7216D5C6D0010C92A /* Resources */ = {
+ 2D02E4791E0B4A5D006451C7 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2D02E48E1E0B4A5D006451C7 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- FA8681C8216D5C6D0010C92A /* Images.xcassets in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -968,65 +382,298 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh\n";
+ shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh";
};
- FA8681CA216D5C6D0010C92A /* Bundle React Native code and images */ = {
+ 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
- name = "Bundle React Native code and images";
+ name = "Bundle React Native Code And Images";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh\n";
+ shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh";
+ };
+ 617FE7057887EE750FF2A943 /* [CP] Copy Pods Resources */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-VideoPlayer/Pods-VideoPlayer-resources.sh",
+ "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle",
+ );
+ name = "[CP] Copy Pods Resources";
+ outputPaths = (
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-VideoPlayer/Pods-VideoPlayer-resources.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 65451BD1F0D11FF4A48FC837 /* [CP] Check Pods Manifest.lock */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
+ );
+ name = "[CP] Check Pods Manifest.lock";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ "$(DERIVED_FILE_DIR)/Pods-VideoPlayer-tvOS-checkManifestLockResult.txt",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 664B3F472CE9752E13793E66 /* [CP] Check Pods Manifest.lock */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
+ );
+ name = "[CP] Check Pods Manifest.lock";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ "$(DERIVED_FILE_DIR)/Pods-VideoPlayer-VideoPlayerTests-checkManifestLockResult.txt",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 9930F79A083DBC2465E15F7C /* [CP] Copy Pods Resources */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-VideoPlayer-VideoPlayerTests/Pods-VideoPlayer-VideoPlayerTests-resources.sh",
+ "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle",
+ );
+ name = "[CP] Copy Pods Resources";
+ outputPaths = (
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-VideoPlayer-VideoPlayerTests/Pods-VideoPlayer-VideoPlayerTests-resources.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ C727CDFD7820FD2B492BFCE2 /* [CP] Check Pods Manifest.lock */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
+ );
+ name = "[CP] Check Pods Manifest.lock";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ "$(DERIVED_FILE_DIR)/Pods-VideoPlayer-checkManifestLockResult.txt",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+ showEnvVarsInLog = 0;
+ };
+ E1CD132A3DDBBC2FFC81826F /* [CP] Check Pods Manifest.lock */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
+ );
+ name = "[CP] Check Pods Manifest.lock";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ "$(DERIVED_FILE_DIR)/Pods-VideoPlayer-tvOSTests-checkManifestLockResult.txt",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+ showEnvVarsInLog = 0;
+ };
+ FD10A7F022414F080027D42C /* Start Packager */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ );
+ name = "Start Packager";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "export RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > \"${SRCROOT}/../node_modules/react-native/scripts/.packager.env\"\nif [ -z \"${RCT_NO_LAUNCH_PACKAGER+xxx}\" ] ; then\n if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\n if ! curl -s \"http://localhost:${RCT_METRO_PORT}/status\" | grep -q \"packager-status:running\" ; then\n echo \"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\"\n exit 2\n fi\n else\n open \"$SRCROOT/../node_modules/react-native/scripts/launchPackager.command\" || echo \"Can't start packager automatically\"\n fi\nfi\n";
+ showEnvVarsInLog = 0;
+ };
+ FD10A7F122414F3F0027D42C /* Start Packager */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ );
+ name = "Start Packager";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "export RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > \"${SRCROOT}/../node_modules/react-native/scripts/.packager.env\"\nif [ -z \"${RCT_NO_LAUNCH_PACKAGER+xxx}\" ] ; then\n if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\n if ! curl -s \"http://localhost:${RCT_METRO_PORT}/status\" | grep -q \"packager-status:running\" ; then\n echo \"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\"\n exit 2\n fi\n else\n open \"$SRCROOT/../node_modules/react-native/scripts/launchPackager.command\" || echo \"Can't start packager automatically\"\n fi\nfi\n";
+ showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
+ 00E356EA1AD99517003FC87E /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 00E356F31AD99517003FC87E /* VideoPlayerTests.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
13B07F871A680F5B00A75B9A /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */,
+ 012C5B8A27A9666F00485309 /* File.swift in Sources */,
13B07FC11A68108700A75B9A /* main.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
- FA8681B7216D5C6D0010C92A /* Sources */ = {
+ 2D02E4771E0B4A5D006451C7 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- FA8681B8216D5C6D0010C92A /* AppDelegate.m in Sources */,
- FA8681B9216D5C6D0010C92A /* main.m in Sources */,
+ 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */,
+ 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2D02E48C1E0B4A5D006451C7 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2DCD954D1E0B4F2C00145EB5 /* VideoPlayerTests.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
-/* Begin PBXVariantGroup section */
- 13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = {
- isa = PBXVariantGroup;
- children = (
- 13B07FB21A68108700A75B9A /* Base */,
- );
- name = LaunchScreen.xib;
- path = VideoPlayer;
- sourceTree = "";
+/* Begin PBXTargetDependency section */
+ 00E356F51AD99517003FC87E /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 13B07F861A680F5B00A75B9A /* VideoPlayer */;
+ targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;
};
-/* End PBXVariantGroup section */
+ 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 2D02E47A1E0B4A5D006451C7 /* VideoPlayer-tvOS */;
+ targetProxy = 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
+ 00E356F61AD99517003FC87E /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 5933B738F6C2A0A8C1CC0234 /* Pods-VideoPlayer-VideoPlayerTests.debug.xcconfig */;
+ buildSettings = {
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CLANG_ENABLE_MODULES = YES;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ INFOPLIST_FILE = VideoPlayerTests/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ OTHER_LDFLAGS = (
+ "-ObjC",
+ "-lc++",
+ "$(inherited)",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_OBJC_BRIDGING_HEADER = "VideoPlayerTests-Bridging-Header.h";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/VideoPlayer.app/VideoPlayer";
+ };
+ name = Debug;
+ };
+ 00E356F71AD99517003FC87E /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 1B6B0FDCD3A9A8AC30563711 /* Pods-VideoPlayer-VideoPlayerTests.release.xcconfig */;
+ buildSettings = {
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CLANG_ENABLE_MODULES = YES;
+ COPY_PHASE_STRIP = NO;
+ INFOPLIST_FILE = VideoPlayerTests/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ OTHER_LDFLAGS = (
+ "-ObjC",
+ "-lc++",
+ "$(inherited)",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_OBJC_BRIDGING_HEADER = "VideoPlayerTests-Bridging-Header.h";
+ SWIFT_VERSION = 5.0;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/VideoPlayer.app/VideoPlayer";
+ };
+ name = Release;
+ };
13B07F941A680F5B00A75B9A /* Debug */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = 72ECC70C444201AEE7C9332F /* Pods-VideoPlayer.debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = 1;
- DEAD_CODE_STRIPPING = NO;
- HEADER_SEARCH_PATHS = "$(inherited)";
+ ENABLE_BITCODE = NO;
INFOPLIST_FILE = VideoPlayer/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
OTHER_LDFLAGS = (
@@ -1034,17 +681,22 @@
"-ObjC",
"-lc++",
);
+ PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = VideoPlayer;
+ SWIFT_OBJC_BRIDGING_HEADER = "VideoPlayer-Bridging-Header.h";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Debug;
};
13B07F951A680F5B00A75B9A /* Release */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = 960F0735700C97E215D22AD0 /* Pods-VideoPlayer.release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = 1;
- HEADER_SEARCH_PATHS = "$(inherited)";
INFOPLIST_FILE = VideoPlayer/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
OTHER_LDFLAGS = (
@@ -1052,33 +704,173 @@
"-ObjC",
"-lc++",
);
+ PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = VideoPlayer;
+ SWIFT_OBJC_BRIDGING_HEADER = "VideoPlayer-Bridging-Header.h";
+ SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Release;
};
+ 2D02E4971E0B4A5E006451C7 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = CEA7B85E17314C1BE0F74AE7 /* Pods-VideoPlayer-tvOS.debug.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
+ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_TESTABILITY = YES;
+ GCC_NO_COMMON_BLOCKS = YES;
+ INFOPLIST_FILE = "VideoPlayer-tvOS/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ "-lc++",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.VideoPlayer-tvOS";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = appletvos;
+ SWIFT_OBJC_BRIDGING_HEADER = "VideoPlayer-tvOS-Bridging-Header.h";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 3;
+ TVOS_DEPLOYMENT_TARGET = 10.0;
+ };
+ name = Debug;
+ };
+ 2D02E4981E0B4A5E006451C7 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 14F94A5638163C887577920D /* Pods-VideoPlayer-tvOS.release.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
+ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ GCC_NO_COMMON_BLOCKS = YES;
+ INFOPLIST_FILE = "VideoPlayer-tvOS/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ "-lc++",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.VideoPlayer-tvOS";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = appletvos;
+ SWIFT_OBJC_BRIDGING_HEADER = "VideoPlayer-tvOS-Bridging-Header.h";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 3;
+ TVOS_DEPLOYMENT_TARGET = 10.0;
+ };
+ name = Release;
+ };
+ 2D02E4991E0B4A5E006451C7 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = E048F2A1D012F1BB4C6925E8 /* Pods-VideoPlayer-tvOSTests.debug.xcconfig */;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_TESTABILITY = YES;
+ GCC_NO_COMMON_BLOCKS = YES;
+ INFOPLIST_FILE = "VideoPlayer-tvOSTests/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ "-lc++",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.VideoPlayer-tvOSTests";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = appletvos;
+ SWIFT_OBJC_BRIDGING_HEADER = "VideoPlayer-tvOSTests-Bridging-Header.h";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/VideoPlayer-tvOS.app/VideoPlayer-tvOS";
+ TVOS_DEPLOYMENT_TARGET = 10.1;
+ };
+ name = Debug;
+ };
+ 2D02E49A1E0B4A5E006451C7 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 0F08E874CF32137C5FEA7CD3 /* Pods-VideoPlayer-tvOSTests.release.xcconfig */;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ GCC_NO_COMMON_BLOCKS = YES;
+ INFOPLIST_FILE = "VideoPlayer-tvOSTests/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ "-lc++",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.VideoPlayer-tvOSTests";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = appletvos;
+ SWIFT_OBJC_BRIDGING_HEADER = "VideoPlayer-tvOSTests-Bridging-Header.h";
+ SWIFT_VERSION = 5.0;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/VideoPlayer-tvOS.app/VideoPlayer-tvOS";
+ TVOS_DEPLOYMENT_TARGET = 10.1;
+ };
+ name = Release;
+ };
83CBBA201A601CBA00E9B192 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
@@ -1091,7 +883,13 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)";
+ LIBRARY_SEARCH_PATHS = (
+ "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
+ "\"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)\"",
+ "\"$(inherited)\"",
+ );
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
@@ -1102,17 +900,28 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
@@ -1120,67 +929,38 @@
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+ LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)";
+ LIBRARY_SEARCH_PATHS = (
+ "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
+ "\"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)\"",
+ "\"$(inherited)\"",
+ );
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
VALIDATE_PRODUCT = YES;
};
name = Release;
};
- FA8681CC216D5C6D0010C92A /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- CURRENT_PROJECT_VERSION = 1;
- DEAD_CODE_STRIPPING = NO;
- INFOPLIST_FILE = "VideoPlayer-tvOS.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 8.0;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
- OTHER_LDFLAGS = (
- "$(inherited)",
- "-ObjC",
- "-lc++",
- );
- PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.VideoPlayer-tvOS";
- PRODUCT_NAME = "VideoPlayer-tvOS";
- SDKROOT = appletvos;
- SUPPORTED_PLATFORMS = "appletvsimulator appletvos";
- TARGETED_DEVICE_FAMILY = 3;
- VERSIONING_SYSTEM = "apple-generic";
- };
- name = Debug;
- };
- FA8681CD216D5C6D0010C92A /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- CURRENT_PROJECT_VERSION = 1;
- INFOPLIST_FILE = "VideoPlayer-tvOS.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 8.0;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
- OTHER_LDFLAGS = (
- "$(inherited)",
- "-ObjC",
- "-lc++",
- );
- PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.VideoPlayer-tvOS";
- PRODUCT_NAME = "VideoPlayer-tvOS";
- SDKROOT = appletvos;
- SUPPORTED_PLATFORMS = "appletvsimulator appletvos";
- TARGETED_DEVICE_FAMILY = 3;
- VERSIONING_SYSTEM = "apple-generic";
- };
- name = Release;
- };
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
+ 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "VideoPlayerTests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 00E356F61AD99517003FC87E /* Debug */,
+ 00E356F71AD99517003FC87E /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "VideoPlayer" */ = {
isa = XCConfigurationList;
buildConfigurations = (
@@ -1190,6 +970,24 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
+ 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "VideoPlayer-tvOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 2D02E4971E0B4A5E006451C7 /* Debug */,
+ 2D02E4981E0B4A5E006451C7 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "VideoPlayer-tvOSTests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 2D02E4991E0B4A5E006451C7 /* Debug */,
+ 2D02E49A1E0B4A5E006451C7 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "VideoPlayer" */ = {
isa = XCConfigurationList;
buildConfigurations = (
@@ -1199,15 +997,6 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
- FA8681CB216D5C6D0010C92A /* Build configuration list for PBXNativeTarget "VideoPlayer-tvOS" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- FA8681CC216D5C6D0010C92A /* Debug */,
- FA8681CD216D5C6D0010C92A /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
/* End XCConfigurationList section */
};
rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
diff --git a/examples/basic/ios/VideoPlayer.xcodeproj/xcshareddata/xcschemes/VideoPlayer-tvOS.xcscheme b/examples/basic/ios/VideoPlayer.xcodeproj/xcshareddata/xcschemes/VideoPlayer-tvOS.xcscheme
index 75b3d2eb..d76773e3 100644
--- a/examples/basic/ios/VideoPlayer.xcodeproj/xcshareddata/xcschemes/VideoPlayer-tvOS.xcscheme
+++ b/examples/basic/ios/VideoPlayer.xcodeproj/xcshareddata/xcschemes/VideoPlayer-tvOS.xcscheme
@@ -1,9 +1,9 @@
-
-
-
-
@@ -42,18 +28,17 @@
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
+
+
+
+
-
-
-
-
-
-
-
-
diff --git a/examples/basic/ios/VideoPlayer.xcodeproj/xcshareddata/xcschemes/VideoPlayer.xcscheme b/examples/basic/ios/VideoPlayer.xcodeproj/xcshareddata/xcschemes/VideoPlayer.xcscheme
index 48a64467..ffe3e473 100644
--- a/examples/basic/ios/VideoPlayer.xcodeproj/xcshareddata/xcschemes/VideoPlayer.xcscheme
+++ b/examples/basic/ios/VideoPlayer.xcodeproj/xcshareddata/xcschemes/VideoPlayer.xcscheme
@@ -1,25 +1,11 @@
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/examples/basic/ios/VideoPlayer.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/basic/ios/VideoPlayer.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 00000000..18d98100
--- /dev/null
+++ b/examples/basic/ios/VideoPlayer.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/examples/basic/ios/VideoPlayer/AppDelegate.h b/examples/basic/ios/VideoPlayer/AppDelegate.h
index a9654d5e..556946d4 100644
--- a/examples/basic/ios/VideoPlayer/AppDelegate.h
+++ b/examples/basic/ios/VideoPlayer/AppDelegate.h
@@ -7,9 +7,10 @@
* of patent rights can be found in the PATENTS file in the same directory.
*/
+#import
#import
-@interface AppDelegate : UIResponder
+@interface AppDelegate : UIResponder
@property (nonatomic, strong) UIWindow *window;
diff --git a/examples/basic/ios/VideoPlayer/AppDelegate.m b/examples/basic/ios/VideoPlayer/AppDelegate.m
index 6c27cb41..9e137ec5 100644
--- a/examples/basic/ios/VideoPlayer/AppDelegate.m
+++ b/examples/basic/ios/VideoPlayer/AppDelegate.m
@@ -9,21 +9,42 @@
#import "AppDelegate.h"
+#import
#import
#import
+#ifdef FB_SONARKIT_ENABLED
+#import
+#import
+#import
+#import
+#import
+#import
+
+static void InitializeFlipper(UIApplication *application) {
+ FlipperClient *client = [FlipperClient sharedClient];
+ SKDescriptorMapper *layoutDescriptorMapper = [[SKDescriptorMapper alloc] initWithDefaults];
+ [client addPlugin:[[FlipperKitLayoutPlugin alloc] initWithRootNode:application withDescriptorMapper:layoutDescriptorMapper]];
+ [client addPlugin:[[FKUserDefaultsPlugin alloc] initWithSuiteName:nil]];
+ [client addPlugin:[FlipperKitReactPlugin new]];
+ [client addPlugin:[[FlipperKitNetworkPlugin alloc] initWithNetworkAdapter:[SKIOSNetworkAdapter new]]];
+ [client start];
+}
+#endif
+
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
- NSURL *jsCodeLocation;
+#ifdef FB_SONARKIT_ENABLED
+ InitializeFlipper(application);
+#endif
- jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil];
+ RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
+ RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
+ moduleName:@"VideoPlayer"
+ initialProperties:nil];
- RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
- moduleName:@"VideoPlayer"
- initialProperties:nil
- launchOptions:launchOptions];
rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
@@ -34,4 +55,13 @@
return YES;
}
+- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
+{
+#if DEBUG
+ return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"src/index" fallbackResource:nil];
+#else
+ return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
+#endif
+}
+
@end
diff --git a/examples/basic/ios/VideoPlayer/Base.lproj/LaunchScreen.xib b/examples/basic/ios/VideoPlayer/Base.lproj/LaunchScreen.xib
deleted file mode 100644
index 9d8b0c89..00000000
--- a/examples/basic/ios/VideoPlayer/Base.lproj/LaunchScreen.xib
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/basic/ios/VideoPlayer/File.swift b/examples/basic/ios/VideoPlayer/File.swift
new file mode 100644
index 00000000..fecc4ab4
--- /dev/null
+++ b/examples/basic/ios/VideoPlayer/File.swift
@@ -0,0 +1 @@
+import Foundation
diff --git a/examples/basic/ios/VideoPlayer/Images.xcassets/Contents.json b/examples/basic/ios/VideoPlayer/Images.xcassets/Contents.json
new file mode 100644
index 00000000..2d92bd53
--- /dev/null
+++ b/examples/basic/ios/VideoPlayer/Images.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
diff --git a/examples/basic/ios/VideoPlayer/Info.plist b/examples/basic/ios/VideoPlayer/Info.plist
index 2fb6a11c..e2a0d716 100644
--- a/examples/basic/ios/VideoPlayer/Info.plist
+++ b/examples/basic/ios/VideoPlayer/Info.plist
@@ -4,10 +4,12 @@
CFBundleDevelopmentRegion
en
+ CFBundleDisplayName
+ VideoPlayer
CFBundleExecutable
$(EXECUTABLE_NAME)
CFBundleIdentifier
- org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)
+ $(PRODUCT_BUNDLE_IDENTIFIER)
CFBundleInfoDictionaryVersion
6.0
CFBundleName
@@ -22,6 +24,21 @@
1
LSRequiresIPhoneOS
+ NSAppTransportSecurity
+
+ NSAllowsArbitraryLoads
+
+ NSExceptionDomains
+
+ localhost
+
+ NSExceptionAllowsInsecureHTTPLoads
+
+
+
+
+ NSLocationWhenInUseUsageDescription
+
UILaunchStoryboardName
LaunchScreen
UIRequiredDeviceCapabilities
@@ -36,19 +53,5 @@
UIViewControllerBasedStatusBarAppearance
- NSLocationWhenInUseUsageDescription
-
- NSAppTransportSecurity
-
-
- NSExceptionDomains
-
- localhost
-
- NSExceptionAllowsInsecureHTTPLoads
-
-
-
-
diff --git a/examples/basic/ios/VideoPlayer/LaunchScreen.storyboard b/examples/basic/ios/VideoPlayer/LaunchScreen.storyboard
new file mode 100644
index 00000000..556e4be5
--- /dev/null
+++ b/examples/basic/ios/VideoPlayer/LaunchScreen.storyboard
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/basic/ios/VideoPlayerTests/Info.plist b/examples/basic/ios/VideoPlayerTests/Info.plist
new file mode 100644
index 00000000..ba72822e
--- /dev/null
+++ b/examples/basic/ios/VideoPlayerTests/Info.plist
@@ -0,0 +1,24 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ BNDL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1
+
+
diff --git a/examples/basic/ios/VideoPlayerTests/VideoPlayerTests.m b/examples/basic/ios/VideoPlayerTests/VideoPlayerTests.m
new file mode 100644
index 00000000..809995a9
--- /dev/null
+++ b/examples/basic/ios/VideoPlayerTests/VideoPlayerTests.m
@@ -0,0 +1,65 @@
+#import
+#import
+
+#import
+#import
+
+#define TIMEOUT_SECONDS 600
+#define TEXT_TO_LOOK_FOR @"Welcome to React"
+
+@interface VideoPlayerTests : XCTestCase
+
+@end
+
+@implementation VideoPlayerTests
+
+- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test
+{
+ if (test(view)) {
+ return YES;
+ }
+ for (UIView *subview in [view subviews]) {
+ if ([self findSubviewInView:subview matching:test]) {
+ return YES;
+ }
+ }
+ return NO;
+}
+
+- (void)testRendersWelcomeScreen
+{
+ UIViewController *vc = [[[RCTSharedApplication() delegate] window] rootViewController];
+ NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS];
+ BOOL foundElement = NO;
+
+ __block NSString *redboxError = nil;
+#ifdef DEBUG
+ RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) {
+ if (level >= RCTLogLevelError) {
+ redboxError = message;
+ }
+ });
+#endif
+
+ while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) {
+ [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
+ [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
+
+ foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) {
+ if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) {
+ return YES;
+ }
+ return NO;
+ }];
+ }
+
+#ifdef DEBUG
+ RCTSetLogFunction(RCTDefaultLogFunction);
+#endif
+
+ XCTAssertNil(redboxError, @"RedBox error: %@", redboxError);
+ XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS);
+}
+
+
+@end
diff --git a/examples/basic/ios/main.jsbundle b/examples/basic/ios/main.jsbundle
deleted file mode 100644
index 4f50ea33..00000000
--- a/examples/basic/ios/main.jsbundle
+++ /dev/null
@@ -1,5 +0,0 @@
-// Offline JS
-// To re-generate the offline bundle, run this from root of your project
-// $ curl 'http://localhost:8081/index.ios.bundle?dev=false&minify=true' -o iOS/main.jsbundle
-
-throw new Error('Offline JS file is empty. See iOS/main.jsbundle for instructions');
diff --git a/examples/basic/ios/main.m b/examples/basic/ios/main.m
deleted file mode 100644
index cb502bc1..00000000
--- a/examples/basic/ios/main.m
+++ /dev/null
@@ -1,19 +0,0 @@
-/**
- * Copyright (c) 2015-present, Facebook, Inc.
- * All rights reserved.
- *
- * This source code is licensed under the BSD-style license found in the
- * LICENSE file in the root directory of this source tree. An additional grant
- * of patent rights can be found in the PATENTS file in the same directory.
- */
-
-#import
-
-#import "AppDelegate.h"
-
-int main(int argc, char * argv[]) {
- @autoreleasepool {
- return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
- }
-}
-
diff --git a/examples/basic/metro.config.js b/examples/basic/metro.config.js
index be3d561c..c78e7ef8 100644
--- a/examples/basic/metro.config.js
+++ b/examples/basic/metro.config.js
@@ -1,4 +1,24 @@
+/**
+ * Metro configuration for React Native
+ * https://github.com/facebook/react-native
+ *
+ * @format
+ */
+const path = require('path');
+const blacklist = require('metro-config/src/defaults/blacklist');
+
module.exports = {
+ resolver: {
+ blacklistRE: blacklist([
+ // This stops "react-native run-windows" from causing the metro server to crash if its already running
+ new RegExp(
+ `${path.resolve(__dirname, 'windows').replace(/[/\\]/g, '/')}.*`,
+ ),
+ // This prevents "react-native run-windows" from hitting: EBUSY: resource busy or locked, open msbuild.ProjectImports.zip
+ /.*\.ProjectImports\.zip/,
+ /(.*\/react-native-video\/node_modules\/.*)$/,
+ ]),
+ },
transformer: {
getTransformOptions: async () => ({
transform: {
@@ -7,4 +27,4 @@ module.exports = {
},
}),
},
-};
\ No newline at end of file
+};
diff --git a/examples/basic/package.json b/examples/basic/package.json
index 057dcac7..530e822d 100644
--- a/examples/basic/package.json
+++ b/examples/basic/package.json
@@ -3,24 +3,34 @@
"version": "1.0.0",
"private": true,
"scripts": {
+ "android": "react-native run-android",
+ "ios": "cd ios && pod install && cd .. && react-native run-ios",
+ "windows": "react-native run-windows",
"start": "node node_modules/react-native/local-cli/cli.js start",
- "postinstall": "rm -rf node_modules/react-native-video/{examples,node_modules}",
"test": "jest",
"lint": "eslint ."
},
"dependencies": {
- "react": "16.9.0",
- "react-native": "0.60.5",
- "react-native-video": "file:../.."
+ "@react-native-picker/picker": "^1.9.11",
+ "babel-plugin-module-resolver": "^4.1.0",
+ "react": "16.13.1",
+ "react-native": "0.63.4",
+ "react-native-video": "../..",
+ "react-native-windows": "0.63.41"
},
"devDependencies": {
- "@babel/core": "^7.6.0",
- "@babel/runtime": "^7.6.0",
- "@react-native-community/eslint-config": "^0.0.5",
- "babel-jest": "^24.9.0",
- "eslint": "^6.4.0",
- "jest": "^24.9.0",
- "metro-react-native-babel-preset": "^0.56.0",
- "react-test-renderer": "16.8.6"
+ "@babel/core": "^7.8.4",
+ "@babel/runtime": "^7.8.4",
+ "@react-native-community/eslint-config": "^1.1.0",
+ "@types/react": "^18.0.6",
+ "@types/react-native": "^0.67.6",
+ "babel-jest": "^25.1.0",
+ "eslint": "^6.5.1",
+ "jest": "^25.1.0",
+ "metro-react-native-babel-preset": "^0.59.0",
+ "react-test-renderer": "16.13.1"
+ },
+ "jest": {
+ "preset": "react-native"
}
-}
+}
\ No newline at end of file
diff --git a/examples/basic/src/VideoPlayer.android.tsx b/examples/basic/src/VideoPlayer.android.tsx
new file mode 100644
index 00000000..4b426ace
--- /dev/null
+++ b/examples/basic/src/VideoPlayer.android.tsx
@@ -0,0 +1,890 @@
+'use strict';
+
+import React, {
+ Component
+} from 'react';
+
+import {
+ StyleSheet,
+ Text,
+ TouchableOpacity,
+ View,
+ ActivityIndicator,
+ PanResponder,
+ ToastAndroid,
+} from 'react-native';
+
+import { Picker } from '@react-native-picker/picker'
+
+import Video, { VideoDecoderProperties, TextTrackType } from 'react-native-video';
+
+class VideoPlayer extends Component {
+
+ state = {
+ rate: 1,
+ volume: 1,
+ muted: false,
+ resizeMode: 'contain',
+ duration: 0.0,
+ currentTime: 0.0,
+ videoWidth: 0,
+ videoHeight: 0,
+ paused: false,
+ fullscreen: true,
+ decoration: true,
+ isLoading: false,
+ seekerFillWidth: 0,
+ seekerPosition: 0,
+ seekerOffset: 0,
+ seeking: false,
+ audioTracks: [],
+ textTracks: [],
+ selectedAudioTrack: undefined,
+ selectedTextTrack: undefined,
+ srcListId: 0,
+ loop: false,
+ showRNVControls: false,
+ };
+
+ seekerWidth = 0
+
+ srcList = [
+ require('./broadchurch.mp4'),
+ {
+ description: '(dash) sintel subtitles',
+ uri: 'https://bitmovin-a.akamaihd.net/content/sintel/sintel.mpd',
+ },
+ {
+ description: '(mp4) big buck bunny',
+ uri: 'http://d23dyxeqlo5psv.cloudfront.net/big_buck_bunny.mp4',
+ },
+ {
+ description: '(hls|live) red bull tv',
+ uri: 'https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_928.m3u8'
+ },
+ {
+ description: '(mp4|subtitles) demo with sintel Subtitles',
+ uri:
+ 'http://www.youtube.com/api/manifest/dash/id/bf5bb2419360daf1/source/youtube?as=fmp4_audio_clear,fmp4_sd_hd_clear&sparams=ip,ipbits,expire,source,id,as&ip=0.0.0.0&ipbits=0&expire=19000000000&signature=51AF5F39AB0CEC3E5497CD9C900EBFEAECCCB5C7.8506521BFC350652163895D4C26DEE124209AA9E&key=ik0',
+ type: 'mpd',
+ },
+ {
+ description: 'invalid URL',
+ uri:
+ 'mmt://www.youtube.com',
+ type: 'mpd',
+ },
+ { description: '(no url) Stopped playback', uri: undefined },
+ {
+ description: '(no view) no View',
+ noView: true,
+ },
+ ]
+
+ video: Video;
+ seekPanResponder: PanResponder | undefined;
+
+ popupInfo = () => {
+ VideoDecoderProperties.getWidevineLevel().then((widevineLevel: number) => {
+ VideoDecoderProperties.isHEVCSupported().then((hevcSupported: boolean) => {
+ VideoDecoderProperties.isCodecSupported('video/avc', 1920, 1080).then(
+ (avcSupported: boolean) => {
+ this.toast(
+ true,
+ 'Widevine level: ' +
+ widevineLevel +
+ '\n hevc: ' +
+ (hevcSupported ? '' : 'NOT') +
+ 'supported' +
+ '\n avc: ' +
+ (avcSupported ? '' : 'NOT') +
+ 'supported',
+ )
+ },
+ )
+ })
+ })
+ }
+
+ onLoad = (data: any) => {
+ this.setState({ duration: data.duration, loading: false, });
+ this.onAudioTracks(data.audioTracks)
+ this.onTextTracks(data.textTracks)
+ };
+
+ onProgress = (data: any) => {
+ if (!this.state.seeking) {
+ const position = this.calculateSeekerPosition()
+ this.setSeekerPosition(position)
+ }
+ this.setState({ currentTime: data.currentTime })
+ };
+
+
+ onVideoLoadStart = () => {
+ console.log('onVideoLoadStart')
+ this.setState({ isLoading: true })
+ }
+
+
+ onAudioTracks = (data: any) => {
+ const selectedTrack = data.audioTracks?.find((x: any) => {
+ return x.selected
+ })
+ this.setState({
+ audioTracks: data,
+ })
+ if (selectedTrack?.language) {
+ this.setState({
+ selectedAudioTrack: {
+ type: 'language',
+ value: selectedTrack?.language,
+ },
+ })
+
+ }
+ }
+
+ onTextTracks = (data: any) => {
+ const selectedTrack = data.textTracks?.find((x: any) => {
+ return x.selected
+ })
+
+ this.setState({
+ textTracks: data,
+ })
+ if (selectedTrack?.language) {
+ this.setState({
+ textTracks: data,
+ selectedTextTrack: {
+ type: 'language',
+ value: selectedTrack?.language,
+ },
+ })
+ }
+ }
+
+ onAspectRatio = (data: any) => {
+ console.log('onAspectRadio called ' + JSON.stringify(data))
+ this.setState({
+ videoWidth: data.width,
+ videoHeight: data.height,
+ })
+ }
+
+ onVideoBuffer = (param: any) => {
+ console.log('onVideoBuffer')
+
+ this.setState({ isLoading: param.isBuffering })
+ }
+
+
+ onReadyForDisplay = () => {
+ console.log('onReadyForDisplay')
+
+ this.setState({ isLoading: false })
+ }
+
+
+ onAudioBecomingNoisy = () => {
+ this.setState({ paused: true })
+ };
+
+ onAudioFocusChanged = (event: { hasAudioFocus: boolean }) => {
+ this.setState({ paused: !event.hasAudioFocus })
+ };
+
+ getCurrentTimePercentage = () => {
+ if (this.state.currentTime > 0 && this.state.duration !== 0) {
+ return this.state.currentTime / this.state.duration;
+ }
+ return 0;
+ };
+
+ renderRateControl(rate: number) {
+ const isSelected = (this.state.rate === rate);
+
+ return (
+ { this.setState({ rate }) }}>
+
+ {rate}
+
+
+ );
+ }
+
+ renderResizeModeControl(resizeMode: string) {
+ const isSelected = (this.state.resizeMode === resizeMode);
+
+ return (
+ { this.setState({ resizeMode }) }}>
+
+ {resizeMode}
+
+
+ )
+ }
+
+ renderVolumeControl(volume: number) {
+ const isSelected = (this.state.volume === volume);
+
+ return (
+ { this.setState({ volume }) }}>
+
+ {volume * 100}%
+
+
+ )
+ }
+
+
+ toast = (visible: boolean, message: string) => {
+ if (visible) {
+ ToastAndroid.showWithGravityAndOffset(
+ message,
+ ToastAndroid.LONG,
+ ToastAndroid.BOTTOM,
+ 25,
+ 50,
+ )
+ return null
+ }
+ return null
+ }
+
+ onError = (err: any) => {
+ console.log(JSON.stringify(err?.error.errorCode))
+ this.toast(true, 'error: ' + err?.error.errorCode)
+ }
+
+ onEnd = () => {
+ this.channelUp()
+ };
+
+
+ toggleFullscreen() {
+ this.setState({ fullscreen: !this.state.fullscreen })
+ }
+ toggleControls() {
+ this.setState({ showRNVControls: !this.state.showRNVControls })
+ }
+
+ toggleDecoration() {
+ this.setState({ decoration: !this.state.decoration })
+ if (this.state.decoration) {
+ this.video.dismissFullscreenPlayer()
+ } else {
+ this.video.presentFullscreenPlayer()
+ }
+ }
+
+ goToChannel(channel: any) {
+ this.setState({
+ srcListId: channel,
+ duration: 0.0,
+ currentTime: 0.0,
+ videoWidth: 0,
+ videoHeight: 0,
+ isLoading: false,
+ audioTracks: [],
+ textTracks: [],
+ selectedAudioTrack: undefined,
+ selectedTextTrack: undefined,
+ })
+ }
+
+
+ channelUp() {
+ console.log('channel up')
+ this.goToChannel((this.state.srcListId + 1) % this.srcList.length)
+ }
+
+ channelDown() {
+ console.log('channel down')
+ this.goToChannel((this.state.srcListId + this.srcList.length - 1) % this.srcList.length)
+ }
+
+ componentDidMount() {
+ this.initSeekPanResponder()
+ }
+
+ renderDecorationsControl() {
+ return (
+ {
+ this.toggleDecoration()
+ }}
+ >
+ {'decoration'}
+
+ )
+ }
+
+ renderInfoControl() {
+ return (
+ {
+ this.popupInfo()
+ }}
+ >
+ {'decoderInfo'}
+
+ )
+ }
+
+ renderFullScreenControl() {
+ return (
+ {
+ this.toggleFullscreen()
+ }}
+ >
+ {'fullscreen'}
+
+ )
+ }
+
+ renderPause() {
+ return (
+ {
+ this.setState({ paused: !this.state.paused })
+ }}
+ >
+
+ {this.state.paused ? 'pause' : 'playing'}
+
+
+ )
+ }
+
+ renderRepeatModeControl() {
+ return (
+ {
+ this.setState({ loop: !this.state.loop })
+ }}
+ >
+
+ {this.state.loop ? 'loop enable' : 'loop disable'}
+
+
+ )
+ }
+
+ renderLeftControl() {
+ return (
+
+ {
+ this.channelDown()
+ }}
+ >
+ {'ChDown'}
+
+
+ // onTimelineUpdated
+ )
+ }
+
+ renderRightControl() {
+ return (
+
+ {
+ this.channelUp()
+ }}
+ >
+ {'ChUp'}
+
+
+ )
+ }
+
+ /**
+ * Render the seekbar and attach its handlers
+ */
+
+ /**
+ * Constrain the location of the seeker to the
+ * min/max value based on how big the
+ * seeker is.
+ *
+ * @param {float} val position of seeker handle in px
+ * @return {float} constrained position of seeker handle in px
+ */
+ constrainToSeekerMinMax(val = 0) {
+ if (val <= 0) {
+ return 0
+ } else if (val >= this.seekerWidth) {
+ return this.seekerWidth
+ }
+ return val
+ }
+
+ /**
+ * Set the position of the seekbar's components
+ * (both fill and handle) according to the
+ * position supplied.
+ *
+ * @param {float} position position in px of seeker handle}
+ */
+ setSeekerPosition(position = 0) {
+ const state = this.state
+ position = this.constrainToSeekerMinMax(position)
+
+ state.seekerFillWidth = position
+ state.seekerPosition = position
+
+ if (!state.seeking) {
+ state.seekerOffset = position
+ }
+
+ this.setState(state)
+ }
+
+ /**
+ * Calculate the position that the seeker should be
+ * at along its track.
+ *
+ * @return {float} position of seeker handle in px based on currentTime
+ */
+ calculateSeekerPosition() {
+ const percent = this.state.currentTime / this.state.duration
+ return this.seekerWidth * percent
+ }
+
+ /**
+ * Return the time that the video should be at
+ * based on where the seeker handle is.
+ *
+ * @return {float} time in ms based on seekerPosition.
+ */
+ calculateTimeFromSeekerPosition() {
+ const percent = this.state.seekerPosition / this.seekerWidth
+ return this.state.duration * percent
+ }
+
+ /**
+ * Get our seekbar responder going
+ */
+ initSeekPanResponder() {
+ this.seekPanResponder = PanResponder.create({
+ // Ask to be the responder.
+ onStartShouldSetPanResponder: (evt, gestureState) => true,
+ onMoveShouldSetPanResponder: (evt, gestureState) => true,
+
+ /**
+ * When we start the pan tell the machine that we're
+ * seeking. This stops it from updating the seekbar
+ * position in the onProgress listener.
+ */
+ onPanResponderGrant: (evt, gestureState) => {
+ const state = this.state
+ // this.clearControlTimeout()
+ const position = evt.nativeEvent.locationX
+ this.setSeekerPosition(position)
+ state.seeking = true
+ this.setState(state)
+ },
+
+ /**
+ * When panning, update the seekbar position, duh.
+ */
+ onPanResponderMove: (evt, gestureState) => {
+ const position = this.state.seekerOffset + gestureState.dx
+ this.setSeekerPosition(position)
+ },
+
+ /**
+ * On release we update the time and seek to it in the video.
+ * If you seek to the end of the video we fire the
+ * onEnd callback
+ */
+ onPanResponderRelease: (evt, gestureState) => {
+ const time = this.calculateTimeFromSeekerPosition()
+ const state = this.state
+ if (time >= state.duration && !state.isLoading) {
+ state.paused = true
+ this.onEnd()
+ } else {
+ this.video?.seek(time)
+ state.seeking = false
+ }
+ this.setState(state)
+ },
+ })
+ }
+
+ renderSeekBar() {
+ if (!this.seekPanResponder) {
+ return null
+ }
+ return (
+
+ (this.seekerWidth = event.nativeEvent.layout.width)}
+ pointerEvents={'none'}
+ >
+ 0 ? this.state.seekerFillWidth : 0,
+ backgroundColor: '#FFF',
+ },
+ ]}
+ pointerEvents={'none'}
+ />
+
+ 0 ? this.state.seekerPosition : 0 },
+ ]}
+ pointerEvents={'none'}
+ >
+
+
+
+ )
+ }
+
+ IndicatorLoadingView() {
+ if (this.state.isLoading)
+ return
+ else return
+ }
+
+ renderTopControl() {
+ return (<>
+
+ {this.srcList[this.state.srcListId]?.description || 'local file'}
+
+
+ {
+ this.toggleControls()
+ }}
+ >
+ {this.state.showRNVControls ? 'Hide controls' : 'Show controls'}
+
+
+ >)
+ }
+
+
+ renderOverlay() {
+ return (
+ <>
+ {this.IndicatorLoadingView()}
+
+ {this.renderTopControl()}
+
+ {!this.state.showRNVControls ? (
+ <>
+
+ {this.renderLeftControl()}
+
+ {this.renderRightControl()}
+
+
+
+ {this.renderInfoControl()}
+
+ {this.renderPause()}
+
+ {this.renderRepeatModeControl()}
+
+
+ {this.renderFullScreenControl()}
+
+
+ {this.renderDecorationsControl()}
+
+
+
+
+ {this.renderRateControl(0.25)}
+ {this.renderRateControl(0.5)}
+ {this.renderRateControl(1.0)}
+ {this.renderRateControl(1.5)}
+ {this.renderRateControl(2.0)}
+
+
+
+ {this.renderVolumeControl(0.5)}
+ {this.renderVolumeControl(1)}
+ {this.renderVolumeControl(1.5)}
+
+
+
+ {this.renderResizeModeControl('cover')}
+ {this.renderResizeModeControl('contain')}
+ {this.renderResizeModeControl('stretch')}
+
+
+ {this.renderSeekBar()}
+
+ AudioTrack
+ {this.state.audioTracks?.length <= 0 ? (
+ empty
+ ) : (
+ {
+ console.log('on audio value change ' + itemValue);
+ this.setState({
+ selectedAudioTrack: {
+ type: 'language',
+ value: itemValue,
+ },
+ });
+ }}
+ >
+ {this.state.audioTracks.map((track) => {
+ return (
+
+ );
+ })}
+
+ )}
+ TextTrack
+ {this.state.textTracks?.length <= 0 ? (
+ empty
+ ) : (
+ {
+ console.log('on value change ' + itemValue);
+ this.setState({
+ selectedTextTrack: {
+ type: 'language',
+ value: itemValue,
+ },
+ });
+ }}
+ >
+
+
+ {this.state.textTracks.map((track) => (
+
+ ))}
+
+ )}
+
+ >
+ ) : null
+ }
+ >
+ )
+ }
+
+ renderVideoView() {
+ const viewStyle = this.state.fullscreen ? styles.fullScreen : styles.halfScreen
+
+ return (
+
+ {
+ this.video = ref
+ }}
+ source={this.srcList[this.state.srcListId]}
+ style={viewStyle}
+ rate={this.state.rate}
+ paused={this.state.paused}
+ volume={this.state.volume}
+ muted={this.state.muted}
+ controls={this.state.showRNVControls}
+ resizeMode={this.state.resizeMode}
+ onLoad={this.onLoad}
+ onProgress={this.onProgress}
+ onEnd={this.onEnd}
+ progressUpdateInterval={1000}
+ onError={this.onError}
+ onAudioBecomingNoisy={this.onAudioBecomingNoisy}
+ onAudioFocusChanged={this.onAudioFocusChanged}
+ onLoadStart={this.onVideoLoadStart}
+ onVideoAspectRatio={this.onAspectRatio}
+ onReadyForDisplay={this.onReadyForDisplay}
+ onBuffer={this.onVideoBuffer}
+ repeat={this.state.loop}
+ selectedTextTrack={this.state.selectedTextTrack}
+ selectedAudioTrack={this.state.selectedAudioTrack}
+ />
+
+ )
+ }
+
+ render() {
+ return (
+
+ {this.srcList[this.state.srcListId]?.noView ? null : this.renderVideoView()}
+ {this.renderOverlay()}
+
+ )
+ }
+
+}
+
+
+const styles = StyleSheet.create({
+ container: {
+ flex: 1,
+ justifyContent: 'center',
+ alignItems: 'center',
+ backgroundColor: 'black',
+ },
+ halfScreen: {
+ position: 'absolute',
+ top: 50,
+ left: 50,
+ bottom: 100,
+ right: 100,
+ },
+ fullScreen: {
+ position: 'absolute',
+ top: 0,
+ left: 0,
+ bottom: 0,
+ right: 0,
+ },
+ bottomControls: {
+ backgroundColor: 'transparent',
+ borderRadius: 5,
+ position: 'absolute',
+ bottom: 20,
+ left: 20,
+ right: 20,
+ },
+ leftControls: {
+ backgroundColor: 'transparent',
+ borderRadius: 5,
+ position: 'absolute',
+ top: 20,
+ bottom: 20,
+ left: 20,
+ },
+ rightControls: {
+ backgroundColor: 'transparent',
+ borderRadius: 5,
+ position: 'absolute',
+ top: 20,
+ bottom: 20,
+ right: 20,
+ },
+ topControls: {
+ backgroundColor: 'transparent',
+ borderRadius: 4,
+ position: 'absolute',
+ top: 20,
+ left: 20,
+ right: 20,
+ flex: 1,
+ flexDirection: 'row',
+ overflow: 'hidden',
+ paddingBottom: 10,
+ },
+ generalControls: {
+ flex: 1,
+ flexDirection: 'row',
+ borderRadius: 4,
+ overflow: 'hidden',
+ paddingBottom: 10,
+ },
+ rateControl: {
+ flex: 1,
+ flexDirection: 'row',
+ justifyContent: 'center',
+ },
+ volumeControl: {
+ flex: 1,
+ flexDirection: 'row',
+ justifyContent: 'center',
+ },
+ resizeModeControl: {
+ flex: 1,
+ flexDirection: 'row',
+ alignItems: 'center',
+ justifyContent: 'center',
+ },
+ leftRightControlOption: {
+ alignSelf: 'center',
+ fontSize: 11,
+ color: 'white',
+ padding: 10,
+ lineHeight: 12,
+ },
+ controlOption: {
+ alignSelf: 'center',
+ fontSize: 11,
+ color: 'white',
+ paddingLeft: 2,
+ paddingRight: 2,
+ lineHeight: 12,
+ },
+ IndicatorStyle: {
+ flex: 1,
+ justifyContent: 'center',
+ },
+ seekbarContainer: {
+ flex: 1,
+ flexDirection: 'row',
+ borderRadius: 4,
+ height: 30,
+ },
+ seekbarTrack: {
+ backgroundColor: '#333',
+ height: 1,
+ position: 'relative',
+ top: 14,
+ width: '100%',
+ },
+ seekbarFill: {
+ backgroundColor: '#FFF',
+ height: 1,
+ width: '100%',
+ },
+ seekbarHandle: {
+ position: 'absolute',
+ marginLeft: -7,
+ height: 28,
+ width: 28,
+ },
+ seekbarCircle: {
+ borderRadius: 12,
+ position: 'relative',
+ top: 8,
+ left: 8,
+ height: 12,
+ width: 12,
+ },
+ picker: {
+ color: 'white',
+ flex: 1,
+ flexDirection: 'row',
+ justifyContent: 'center',
+ },
+});
+
+export default VideoPlayer
\ No newline at end of file
diff --git a/examples/basic/index.ios.js b/examples/basic/src/VideoPlayer.ios.tsx
similarity index 82%
rename from examples/basic/index.ios.js
rename to examples/basic/src/VideoPlayer.ios.tsx
index 1bc0ac47..74025104 100644
--- a/examples/basic/index.ios.js
+++ b/examples/basic/src/VideoPlayer.ios.tsx
@@ -4,8 +4,7 @@ import React, {
} from 'react';
import {
- AlertIOS,
- AppRegistry,
+ Alert,
Platform,
StyleSheet,
Text,
@@ -35,7 +34,7 @@ const filterTypes = [
];
class VideoPlayer extends Component {
- constructor(props) {
+ constructor(props: any) {
super(props);
this.onLoad = this.onLoad.bind(this);
this.onProgress = this.onProgress.bind(this);
@@ -52,17 +51,18 @@ class VideoPlayer extends Component {
paused: true,
skin: 'custom',
ignoreSilentSwitch: null,
+ mixWithOthers: null,
isBuffering: false,
filter: FilterType.NONE,
filterEnabled: true
};
- onLoad(data) {
+ onLoad(data: any) {
console.log('On load fired!');
this.setState({duration: data.duration});
}
- onProgress(data) {
+ onProgress(data: any) {
this.setState({currentTime: data.currentTime});
}
@@ -71,14 +71,14 @@ class VideoPlayer extends Component {
}
getCurrentTimePercentage() {
- if (this.state.currentTime > 0) {
- return parseFloat(this.state.currentTime) / parseFloat(this.state.duration);
+ if (this.state.currentTime > 0 && this.state.duration !== 0) {
+ return this.state.currentTime / this.state.duration;
} else {
return 0;
}
}
- setFilter(step) {
+ setFilter(step: number) {
let index = filterTypes.indexOf(this.state.filter) + step;
if (index === filterTypes.length) {
@@ -107,7 +107,7 @@ class VideoPlayer extends Component {
);
}
- renderRateControl(rate) {
+ renderRateControl(rate: number) {
const isSelected = (this.state.rate == rate);
return (
@@ -119,7 +119,7 @@ class VideoPlayer extends Component {
)
}
- renderResizeModeControl(resizeMode) {
+ renderResizeModeControl(resizeMode: string) {
const isSelected = (this.state.resizeMode == resizeMode);
return (
@@ -131,7 +131,7 @@ class VideoPlayer extends Component {
)
}
- renderVolumeControl(volume) {
+ renderVolumeControl(volume: number) {
const isSelected = (this.state.volume == volume);
return (
@@ -143,7 +143,7 @@ class VideoPlayer extends Component {
)
}
- renderIgnoreSilentSwitchControl(ignoreSilentSwitch) {
+ renderIgnoreSilentSwitchControl(ignoreSilentSwitch: string) {
const isSelected = (this.state.ignoreSilentSwitch == ignoreSilentSwitch);
return (
@@ -155,6 +155,18 @@ class VideoPlayer extends Component {
)
}
+ renderMixWithOthersControl(mixWithOthers: string) {
+ const isSelected = (this.state.mixWithOthers == mixWithOthers);
+
+ return (
+ { this.setState({mixWithOthers: mixWithOthers}) }}>
+
+ {mixWithOthers}
+
+
+ )
+ }
+
renderCustomSkin() {
const flexCompleted = this.getCurrentTimePercentage() * 100;
const flexRemaining = (1 - this.getCurrentTimePercentage()) * 100;
@@ -170,11 +182,12 @@ class VideoPlayer extends Component {
volume={this.state.volume}
muted={this.state.muted}
ignoreSilentSwitch={this.state.ignoreSilentSwitch}
+ mixWithOthers={this.state.mixWithOthers}
resizeMode={this.state.resizeMode}
onLoad={this.onLoad}
onBuffer={this.onBuffer}
onProgress={this.onProgress}
- onEnd={() => { AlertIOS.alert('Done!') }}
+ onEnd={() => { Alert.alert('Done!') }}
repeat={true}
filter={this.state.filter}
filterEnabled={this.state.filterEnabled}
@@ -226,10 +239,16 @@ class VideoPlayer extends Component {
{
(Platform.OS === 'ios') ?
-
- {this.renderIgnoreSilentSwitchControl('ignore')}
- {this.renderIgnoreSilentSwitchControl('obey')}
- : null
+ <>
+
+ {this.renderIgnoreSilentSwitchControl('ignore')}
+ {this.renderIgnoreSilentSwitchControl('obey')}
+
+
+ {this.renderMixWithOthersControl('mix')}
+ {this.renderMixWithOthersControl('duck')}
+
+ > : null
}
@@ -257,11 +276,12 @@ class VideoPlayer extends Component {
volume={this.state.volume}
muted={this.state.muted}
ignoreSilentSwitch={this.state.ignoreSilentSwitch}
+ mixWithOthers={this.state.mixWithOthers}
resizeMode={this.state.resizeMode}
onLoad={this.onLoad}
onBuffer={this.onBuffer}
onProgress={this.onProgress}
- onEnd={() => { AlertIOS.alert('Done!') }}
+ onEnd={() => { Alert.alert('Done!') }}
repeat={true}
controls={this.state.controls}
filter={this.state.filter}
@@ -313,10 +333,16 @@ class VideoPlayer extends Component {
{
(Platform.OS === 'ios') ?
-
- {this.renderIgnoreSilentSwitchControl('ignore')}
- {this.renderIgnoreSilentSwitchControl('obey')}
- : null
+ <>
+
+ {this.renderIgnoreSilentSwitchControl('ignore')}
+ {this.renderIgnoreSilentSwitchControl('obey')}
+
+
+ {this.renderMixWithOthersControl('mix')}
+ {this.renderMixWithOthersControl('duck')}
+
+ > : null
}
@@ -399,6 +425,12 @@ const styles = StyleSheet.create({
alignItems: 'center',
justifyContent: 'center'
},
+ mixWithOthersControl: {
+ flex: 1,
+ flexDirection: 'row',
+ alignItems: 'center',
+ justifyContent: 'center'
+ },
controlOption: {
alignSelf: 'center',
fontSize: 11,
@@ -409,8 +441,13 @@ const styles = StyleSheet.create({
},
nativeVideoControls: {
top: 184,
- height: 300
- }
+ height: 300,
+ },
+ trackingControls: {
+ flex: 1,
+ flexDirection: 'row',
+ alignItems: 'center',
+ justifyContent: 'center',
+ },
});
-
-AppRegistry.registerComponent('VideoPlayer', () => VideoPlayer);
+export default VideoPlayer
\ No newline at end of file
diff --git a/examples/basic/index.windows.js b/examples/basic/src/VideoPlayer.windows.tsx
similarity index 90%
rename from examples/basic/index.windows.js
rename to examples/basic/src/VideoPlayer.windows.tsx
index a3d21c6f..217fcc6e 100644
--- a/examples/basic/index.windows.js
+++ b/examples/basic/src/VideoPlayer.windows.tsx
@@ -5,7 +5,6 @@ import React, {
} from 'react';
import {
- AppRegistry,
StyleSheet,
Text,
TouchableOpacity,
@@ -15,7 +14,7 @@ import {
import Video from 'react-native-video';
class VideoPlayer extends Component {
- constructor(props) {
+ constructor(props: any) {
super(props);
this.onLoad = this.onLoad.bind(this);
this.onProgress = this.onProgress.bind(this);
@@ -28,25 +27,26 @@ class VideoPlayer extends Component {
resizeMode: 'contain',
duration: 0.0,
currentTime: 0.0,
+ paused: 0,
};
- onLoad(data) {
+ onLoad(data: any) {
this.setState({duration: data.duration});
}
- onProgress(data) {
+ onProgress(data: any) {
this.setState({currentTime: data.currentTime});
}
getCurrentTimePercentage() {
- if (this.state.currentTime > 0) {
- return parseFloat(this.state.currentTime) / parseFloat(this.state.duration);
+ if (this.state.currentTime > 0 && this.state.duration !== 0) {
+ return this.state.currentTime / this.state.duration;
} else {
return 0;
}
}
- renderRateControl(rate) {
+ renderRateControl(rate: number) {
const isSelected = (this.state.rate == rate);
return (
@@ -58,7 +58,7 @@ class VideoPlayer extends Component {
)
}
- renderResizeModeControl(resizeMode) {
+ renderResizeModeControl(resizeMode: string) {
const isSelected = (this.state.resizeMode == resizeMode);
return (
@@ -70,7 +70,7 @@ class VideoPlayer extends Component {
)
}
- renderVolumeControl(volume) {
+ renderVolumeControl(volume: number) {
const isSelected = (this.state.volume == volume);
return (
@@ -205,6 +205,11 @@ const styles = StyleSheet.create({
paddingRight: 2,
lineHeight: 12,
},
+ trackingControls: {
+ flex: 1,
+ flexDirection: 'row',
+ alignItems: 'center',
+ justifyContent: 'center',
+ },
});
-
-AppRegistry.registerComponent('VideoPlayer', () => VideoPlayer);
+export default VideoPlayer
\ No newline at end of file
diff --git a/examples/basic/broadchurch.mp4 b/examples/basic/src/broadchurch.mp4
similarity index 100%
rename from examples/basic/broadchurch.mp4
rename to examples/basic/src/broadchurch.mp4
diff --git a/examples/basic/src/index.js b/examples/basic/src/index.js
new file mode 100644
index 00000000..add8ab16
--- /dev/null
+++ b/examples/basic/src/index.js
@@ -0,0 +1,5 @@
+import {AppRegistry} from 'react-native';
+import VideoPlayer from './VideoPlayer';
+import {name as appName} from '../app.json';
+
+AppRegistry.registerComponent(appName, () => VideoPlayer);
diff --git a/examples/basic/tsconfig.json b/examples/basic/tsconfig.json
new file mode 100644
index 00000000..a415e49c
--- /dev/null
+++ b/examples/basic/tsconfig.json
@@ -0,0 +1,20 @@
+{
+ "compilerOptions": {
+ "allowJs": true,
+ "allowSyntheticDefaultImports": true,
+ "esModuleInterop": true,
+ "isolatedModules": true,
+ "jsx": "react-native",
+ "lib": ["es2017"],
+ "moduleResolution": "node",
+ "noEmit": true,
+ "strict": true,
+ "target": "esnext"
+ },
+ "exclude": [
+ "node_modules",
+ "babel.config.js",
+ "metro.config.js",
+ "jest.config.js"
+ ]
+}
\ No newline at end of file
diff --git a/examples/basic/windows/.gitignore b/examples/basic/windows/.gitignore
index 33d3fde2..878f7ba5 100644
--- a/examples/basic/windows/.gitignore
+++ b/examples/basic/windows/.gitignore
@@ -1,89 +1,92 @@
-*AppPackages*
-*BundleArtifacts*
-*ReactAssets*
-
-#OS junk files
-[Tt]humbs.db
-*.DS_Store
-
-#Visual Studio files
-*.[Oo]bj
-*.user
-*.aps
-*.pch
-*.vspscc
-*.vssscc
-*_i.c
-*_p.c
-*.ncb
-*.suo
-*.tlb
-*.tlh
-*.bak
-*.[Cc]ache
-*.ilk
-*.log
-*.lib
-*.sbr
-*.sdf
-*.opensdf
-*.opendb
-*.unsuccessfulbuild
-ipch/
-[Oo]bj/
-[Bb]in
-[Dd]ebug*/
-[Rr]elease*/
-Ankh.NoLoad
-
-# Visual C++ cache files
-ipch/
-*.aps
-*.ncb
-*.opendb
-*.opensdf
-*.sdf
-*.cachefile
-*.VC.db
-*.VC.VC.opendb
-
-#MonoDevelop
-*.pidb
-*.userprefs
-
-#Tooling
-_ReSharper*/
-*.resharper
-[Tt]est[Rr]esult*
-*.sass-cache
-
-#Project files
-[Bb]uild/
-
-#Subversion files
-.svn
-
-# Office Temp Files
-~$*
-
-# vim Temp Files
-*~
-
-#NuGet
-packages/
-*.nupkg
-
-#ncrunch
-*ncrunch*
-*crunch*.local.xml
-
-# visual studio database projects
-*.dbmdl
-
-#Test files
-*.testsettings
-
-#Other files
-*.DotSettings
-.vs/
-*project.lock.json
+*AppPackages*
+*BundleArtifacts*
+
+#OS junk files
+[Tt]humbs.db
+*.DS_Store
+
+#Visual Studio files
+*.[Oo]bj
+*.user
+*.aps
+*.pch
+*.vspscc
+*.vssscc
+*_i.c
+*_p.c
+*.ncb
+*.suo
+*.tlb
+*.tlh
+*.bak
+*.[Cc]ache
+*.ilk
+*.log
+*.lib
+*.sbr
+*.sdf
+*.opensdf
+*.opendb
+*.unsuccessfulbuild
+ipch/
+[Oo]bj/
+[Bb]in
+[Dd]ebug*/
+[Rr]elease*/
+Ankh.NoLoad
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opendb
+*.opensdf
+*.sdf
+*.cachefile
+*.VC.db
+*.VC.VC.opendb
+
+#MonoDevelop
+*.pidb
+*.userprefs
+
+#Tooling
+_ReSharper*/
+*.resharper
+[Tt]est[Rr]esult*
+*.sass-cache
+
+#Project files
+[Bb]uild/
+
+#Subversion files
+.svn
+
+# Office Temp Files
+~$*
+
+# vim Temp Files
+*~
+
+#NuGet
+packages/
+*.nupkg
+
+#ncrunch
+*ncrunch*
+*crunch*.local.xml
+
+# visual studio database projects
+*.dbmdl
+
+#Test files
+*.testsettings
+
+#Other files
+*.DotSettings
+.vs/
+*project.lock.json
+
+#Files generated by the VS build
+**/Generated Files/**
+
diff --git a/examples/basic/windows/VideoPlayer.sln b/examples/basic/windows/VideoPlayer.sln
index 3d10db9e..9c6c57cd 100644
--- a/examples/basic/windows/VideoPlayer.sln
+++ b/examples/basic/windows/VideoPlayer.sln
@@ -1,141 +1,205 @@
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 14
-VisualStudioVersion = 14.0.25420.1
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VideoPlayer", "VideoPlayer\VideoPlayer.csproj", "{A027BE54-D118-49A4-8D84-0666A2A93E64}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReactNative", "..\node_modules\react-native-windows\ReactWindows\ReactNative\ReactNative.csproj", "{C7673AD5-E3AA-468C-A5FD-FA38154E205C}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ChakraBridge", "..\node_modules\react-native-windows\ReactWindows\ChakraBridge\ChakraBridge.vcxproj", "{4B72C796-16D5-4E3A-81C0-3E36F531E578}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReactNativeVideo", "..\node_modules\react-native-video\windows\ReactNativeVideo\ReactNativeVideo.csproj", "{E8F5F57F-757E-4237-AD23-F7A8755427CD}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|ARM = Debug|ARM
- Debug|x64 = Debug|x64
- Debug|x86 = Debug|x86
- DebugBundle|ARM = DebugBundle|ARM
- DebugBundle|x64 = DebugBundle|x64
- DebugBundle|x86 = DebugBundle|x86
- Release|ARM = Release|ARM
- Release|x64 = Release|x64
- Release|x86 = Release|x86
- ReleaseBundle|ARM = ReleaseBundle|ARM
- ReleaseBundle|x64 = ReleaseBundle|x64
- ReleaseBundle|x86 = ReleaseBundle|x86
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.Debug|ARM.ActiveCfg = Debug|ARM
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.Debug|ARM.Build.0 = Debug|ARM
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.Debug|ARM.Deploy.0 = Debug|ARM
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.Debug|x64.ActiveCfg = Debug|x64
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.Debug|x64.Build.0 = Debug|x64
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.Debug|x64.Deploy.0 = Debug|x64
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.Debug|x86.ActiveCfg = Debug|x86
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.Debug|x86.Build.0 = Debug|x86
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.Debug|x86.Deploy.0 = Debug|x86
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.DebugBundle|ARM.ActiveCfg = DebugBundle|ARM
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.DebugBundle|ARM.Build.0 = DebugBundle|ARM
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.DebugBundle|ARM.Deploy.0 = DebugBundle|ARM
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.DebugBundle|x64.ActiveCfg = DebugBundle|x64
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.DebugBundle|x64.Build.0 = DebugBundle|x64
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.DebugBundle|x64.Deploy.0 = DebugBundle|x64
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.DebugBundle|x86.ActiveCfg = DebugBundle|x86
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.DebugBundle|x86.Build.0 = DebugBundle|x86
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.DebugBundle|x86.Deploy.0 = DebugBundle|x86
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.Release|ARM.ActiveCfg = Release|ARM
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.Release|ARM.Build.0 = Release|ARM
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.Release|ARM.Deploy.0 = Release|ARM
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.Release|x64.ActiveCfg = Release|x64
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.Release|x64.Build.0 = Release|x64
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.Release|x64.Deploy.0 = Release|x64
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.Release|x86.ActiveCfg = Release|x86
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.Release|x86.Build.0 = Release|x86
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.Release|x86.Deploy.0 = Release|x86
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.ReleaseBundle|ARM.ActiveCfg = ReleaseBundle|ARM
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.ReleaseBundle|ARM.Build.0 = ReleaseBundle|ARM
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.ReleaseBundle|ARM.Deploy.0 = ReleaseBundle|ARM
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.ReleaseBundle|x64.ActiveCfg = ReleaseBundle|x64
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.ReleaseBundle|x64.Build.0 = ReleaseBundle|x64
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.ReleaseBundle|x64.Deploy.0 = ReleaseBundle|x64
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.ReleaseBundle|x86.ActiveCfg = ReleaseBundle|x86
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.ReleaseBundle|x86.Build.0 = ReleaseBundle|x86
- {A027BE54-D118-49A4-8D84-0666A2A93E64}.ReleaseBundle|x86.Deploy.0 = ReleaseBundle|x86
- {C7673AD5-E3AA-468C-A5FD-FA38154E205C}.Debug|ARM.ActiveCfg = Debug|ARM
- {C7673AD5-E3AA-468C-A5FD-FA38154E205C}.Debug|ARM.Build.0 = Debug|ARM
- {C7673AD5-E3AA-468C-A5FD-FA38154E205C}.Debug|x64.ActiveCfg = Debug|x64
- {C7673AD5-E3AA-468C-A5FD-FA38154E205C}.Debug|x64.Build.0 = Debug|x64
- {C7673AD5-E3AA-468C-A5FD-FA38154E205C}.Debug|x86.ActiveCfg = Debug|x86
- {C7673AD5-E3AA-468C-A5FD-FA38154E205C}.Debug|x86.Build.0 = Debug|x86
- {C7673AD5-E3AA-468C-A5FD-FA38154E205C}.DebugBundle|ARM.ActiveCfg = Debug|ARM
- {C7673AD5-E3AA-468C-A5FD-FA38154E205C}.DebugBundle|ARM.Build.0 = Debug|ARM
- {C7673AD5-E3AA-468C-A5FD-FA38154E205C}.DebugBundle|x64.ActiveCfg = Debug|x64
- {C7673AD5-E3AA-468C-A5FD-FA38154E205C}.DebugBundle|x64.Build.0 = Debug|x64
- {C7673AD5-E3AA-468C-A5FD-FA38154E205C}.DebugBundle|x86.ActiveCfg = Debug|x86
- {C7673AD5-E3AA-468C-A5FD-FA38154E205C}.DebugBundle|x86.Build.0 = Debug|x86
- {C7673AD5-E3AA-468C-A5FD-FA38154E205C}.Release|ARM.ActiveCfg = Release|ARM
- {C7673AD5-E3AA-468C-A5FD-FA38154E205C}.Release|ARM.Build.0 = Release|ARM
- {C7673AD5-E3AA-468C-A5FD-FA38154E205C}.Release|x64.ActiveCfg = Release|x64
- {C7673AD5-E3AA-468C-A5FD-FA38154E205C}.Release|x64.Build.0 = Release|x64
- {C7673AD5-E3AA-468C-A5FD-FA38154E205C}.Release|x86.ActiveCfg = Release|x86
- {C7673AD5-E3AA-468C-A5FD-FA38154E205C}.Release|x86.Build.0 = Release|x86
- {C7673AD5-E3AA-468C-A5FD-FA38154E205C}.ReleaseBundle|ARM.ActiveCfg = Release|ARM
- {C7673AD5-E3AA-468C-A5FD-FA38154E205C}.ReleaseBundle|ARM.Build.0 = Release|ARM
- {C7673AD5-E3AA-468C-A5FD-FA38154E205C}.ReleaseBundle|x64.ActiveCfg = Release|x64
- {C7673AD5-E3AA-468C-A5FD-FA38154E205C}.ReleaseBundle|x64.Build.0 = Release|x64
- {C7673AD5-E3AA-468C-A5FD-FA38154E205C}.ReleaseBundle|x86.ActiveCfg = Release|x86
- {C7673AD5-E3AA-468C-A5FD-FA38154E205C}.ReleaseBundle|x86.Build.0 = Release|x86
- {4B72C796-16D5-4E3A-81C0-3E36F531E578}.Debug|ARM.ActiveCfg = Debug|ARM
- {4B72C796-16D5-4E3A-81C0-3E36F531E578}.Debug|ARM.Build.0 = Debug|ARM
- {4B72C796-16D5-4E3A-81C0-3E36F531E578}.Debug|x64.ActiveCfg = Debug|x64
- {4B72C796-16D5-4E3A-81C0-3E36F531E578}.Debug|x64.Build.0 = Debug|x64
- {4B72C796-16D5-4E3A-81C0-3E36F531E578}.Debug|x86.ActiveCfg = Debug|Win32
- {4B72C796-16D5-4E3A-81C0-3E36F531E578}.Debug|x86.Build.0 = Debug|Win32
- {4B72C796-16D5-4E3A-81C0-3E36F531E578}.DebugBundle|ARM.ActiveCfg = Debug|ARM
- {4B72C796-16D5-4E3A-81C0-3E36F531E578}.DebugBundle|ARM.Build.0 = Debug|ARM
- {4B72C796-16D5-4E3A-81C0-3E36F531E578}.DebugBundle|x64.ActiveCfg = Debug|x64
- {4B72C796-16D5-4E3A-81C0-3E36F531E578}.DebugBundle|x64.Build.0 = Debug|x64
- {4B72C796-16D5-4E3A-81C0-3E36F531E578}.DebugBundle|x86.ActiveCfg = Debug|Win32
- {4B72C796-16D5-4E3A-81C0-3E36F531E578}.DebugBundle|x86.Build.0 = Debug|Win32
- {4B72C796-16D5-4E3A-81C0-3E36F531E578}.Release|ARM.ActiveCfg = Release|ARM
- {4B72C796-16D5-4E3A-81C0-3E36F531E578}.Release|ARM.Build.0 = Release|ARM
- {4B72C796-16D5-4E3A-81C0-3E36F531E578}.Release|x64.ActiveCfg = Release|x64
- {4B72C796-16D5-4E3A-81C0-3E36F531E578}.Release|x64.Build.0 = Release|x64
- {4B72C796-16D5-4E3A-81C0-3E36F531E578}.Release|x86.ActiveCfg = Release|Win32
- {4B72C796-16D5-4E3A-81C0-3E36F531E578}.Release|x86.Build.0 = Release|Win32
- {4B72C796-16D5-4E3A-81C0-3E36F531E578}.ReleaseBundle|ARM.ActiveCfg = Release|ARM
- {4B72C796-16D5-4E3A-81C0-3E36F531E578}.ReleaseBundle|ARM.Build.0 = Release|ARM
- {4B72C796-16D5-4E3A-81C0-3E36F531E578}.ReleaseBundle|x64.ActiveCfg = Release|x64
- {4B72C796-16D5-4E3A-81C0-3E36F531E578}.ReleaseBundle|x64.Build.0 = Release|x64
- {4B72C796-16D5-4E3A-81C0-3E36F531E578}.ReleaseBundle|x86.ActiveCfg = Release|Win32
- {4B72C796-16D5-4E3A-81C0-3E36F531E578}.ReleaseBundle|x86.Build.0 = Release|Win32
- {E8F5F57F-757E-4237-AD23-F7A8755427CD}.Debug|ARM.ActiveCfg = Debug|ARM
- {E8F5F57F-757E-4237-AD23-F7A8755427CD}.Debug|ARM.Build.0 = Debug|ARM
- {E8F5F57F-757E-4237-AD23-F7A8755427CD}.Debug|x64.ActiveCfg = Debug|x64
- {E8F5F57F-757E-4237-AD23-F7A8755427CD}.Debug|x64.Build.0 = Debug|x64
- {E8F5F57F-757E-4237-AD23-F7A8755427CD}.Debug|x86.ActiveCfg = Debug|x86
- {E8F5F57F-757E-4237-AD23-F7A8755427CD}.Debug|x86.Build.0 = Debug|x86
- {E8F5F57F-757E-4237-AD23-F7A8755427CD}.DebugBundle|ARM.ActiveCfg = Debug|ARM
- {E8F5F57F-757E-4237-AD23-F7A8755427CD}.DebugBundle|ARM.Build.0 = Debug|ARM
- {E8F5F57F-757E-4237-AD23-F7A8755427CD}.DebugBundle|x64.ActiveCfg = Debug|x64
- {E8F5F57F-757E-4237-AD23-F7A8755427CD}.DebugBundle|x64.Build.0 = Debug|x64
- {E8F5F57F-757E-4237-AD23-F7A8755427CD}.DebugBundle|x86.ActiveCfg = Debug|x86
- {E8F5F57F-757E-4237-AD23-F7A8755427CD}.DebugBundle|x86.Build.0 = Debug|x86
- {E8F5F57F-757E-4237-AD23-F7A8755427CD}.Release|ARM.ActiveCfg = Release|ARM
- {E8F5F57F-757E-4237-AD23-F7A8755427CD}.Release|ARM.Build.0 = Release|ARM
- {E8F5F57F-757E-4237-AD23-F7A8755427CD}.Release|x64.ActiveCfg = Release|x64
- {E8F5F57F-757E-4237-AD23-F7A8755427CD}.Release|x64.Build.0 = Release|x64
- {E8F5F57F-757E-4237-AD23-F7A8755427CD}.Release|x86.ActiveCfg = Release|x86
- {E8F5F57F-757E-4237-AD23-F7A8755427CD}.Release|x86.Build.0 = Release|x86
- {E8F5F57F-757E-4237-AD23-F7A8755427CD}.ReleaseBundle|ARM.ActiveCfg = Release|ARM
- {E8F5F57F-757E-4237-AD23-F7A8755427CD}.ReleaseBundle|ARM.Build.0 = Release|ARM
- {E8F5F57F-757E-4237-AD23-F7A8755427CD}.ReleaseBundle|x64.ActiveCfg = Release|x64
- {E8F5F57F-757E-4237-AD23-F7A8755427CD}.ReleaseBundle|x64.Build.0 = Release|x64
- {E8F5F57F-757E-4237-AD23-F7A8755427CD}.ReleaseBundle|x86.ActiveCfg = Release|x86
- {E8F5F57F-757E-4237-AD23-F7A8755427CD}.ReleaseBundle|x86.Build.0 = Release|x86
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.29215.179
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "videoplayer", "videoplayer\videoplayer.vcxproj", "{BF9FF035-B976-4990-86FE-09D015E91C20}"
+ ProjectSection(ProjectDependencies) = postProject
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136} = {F7D32BD0-2749-483E-9A0D-1635EF7E3136}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Folly", "..\node_modules\react-native-windows\Folly\Folly.vcxproj", "{A990658C-CE31-4BCC-976F-0FC6B1AF693D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ReactCommon", "..\node_modules\react-native-windows\ReactCommon\ReactCommon.vcxproj", "{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}"
+ ProjectSection(ProjectDependencies) = postProject
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D} = {A990658C-CE31-4BCC-976F-0FC6B1AF693D}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Chakra", "..\node_modules\react-native-windows\Chakra\Chakra.vcxitems", "{C38970C0-5FBF-4D69-90D8-CBAC225AE895}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.ReactNative", "..\node_modules\react-native-windows\Microsoft.ReactNative\Microsoft.ReactNative.vcxproj", "{F7D32BD0-2749-483E-9A0D-1635EF7E3136}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "JSI.Shared", "..\node_modules\react-native-windows\JSI\Shared\JSI.Shared.vcxitems", "{0CC28589-39E4-4288-B162-97B959F8B843}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "JSI.Universal", "..\node_modules\react-native-windows\JSI\Universal\JSI.Universal.vcxproj", "{A62D504A-16B8-41D2-9F19-E2E86019E5E4}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.ReactNative.Cxx", "..\node_modules\react-native-windows\Microsoft.ReactNative.Cxx\Microsoft.ReactNative.Cxx.vcxitems", "{DA8B35B3-DA00-4B02-BDE6-6A397B3FD46B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Common", "..\node_modules\react-native-windows\Common\Common.vcxproj", "{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ReactNative", "ReactNative", "{5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.ReactNative.Shared", "..\node_modules\react-native-windows\Shared\Shared.vcxitems", "{2049DBE9-8D13-42C9-AE4B-413AE38FFFD0}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Mso", "..\node_modules\react-native-windows\Mso\Mso.vcxitems", "{84E05BFA-CBAF-4F0D-BFB6-4CE85742A57E}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Include", "..\node_modules\react-native-windows\include\Include.vcxitems", "{EF074BA1-2D54-4D49-A28E-5E040B47CD2E}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ReactNativeVideoCPP", "..\node_modules\react-native-video\windows\ReactNativeVideoCPP\ReactNativeVideoCPP.vcxproj", "{0D1E54D3-4BE1-4DAF-98BF-124C28C85014}"
+EndProject
+Global
+ GlobalSection(SharedMSBuildProjectFiles) = preSolution
+ ..\node_modules\react-native-windows\JSI\Shared\JSI.Shared.vcxitems*{0cc28589-39e4-4288-b162-97b959f8b843}*SharedItemsImports = 9
+ ..\node_modules\react-native-windows\Shared\Shared.vcxitems*{2049dbe9-8d13-42c9-ae4b-413ae38fffd0}*SharedItemsImports = 9
+ ..\node_modules\react-native-windows\Mso\Mso.vcxitems*{84e05bfa-cbaf-4f0d-bfb6-4ce85742a57e}*SharedItemsImports = 9
+ ..\node_modules\react-native-windows\JSI\Shared\JSI.Shared.vcxitems*{a62d504a-16b8-41d2-9f19-e2e86019e5e4}*SharedItemsImports = 4
+ ..\node_modules\react-native-windows\Chakra\Chakra.vcxitems*{c38970c0-5fbf-4d69-90d8-cbac225ae895}*SharedItemsImports = 9
+ ..\node_modules\react-native-windows\Microsoft.ReactNative.Cxx\Microsoft.ReactNative.Cxx.vcxitems*{da8b35b3-da00-4b02-bde6-6a397b3fd46b}*SharedItemsImports = 9
+ ..\node_modules\react-native-windows\include\Include.vcxitems*{ef074ba1-2d54-4d49-a28e-5e040b47cd2e}*SharedItemsImports = 9
+ ..\node_modules\react-native-windows\Chakra\Chakra.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4
+ ..\node_modules\react-native-windows\Microsoft.ReactNative.Cxx\Microsoft.ReactNative.Cxx.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4
+ ..\node_modules\react-native-windows\Mso\Mso.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4
+ ..\node_modules\react-native-windows\Shared\Shared.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4
+ EndGlobalSection
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|ARM = Debug|ARM
+ Debug|ARM64 = Debug|ARM64
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
+ Release|ARM = Release|ARM
+ Release|ARM64 = Release|ARM64
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {BF9FF035-B976-4990-86FE-09D015E91C20}.Debug|ARM.ActiveCfg = Debug|ARM
+ {BF9FF035-B976-4990-86FE-09D015E91C20}.Debug|ARM.Build.0 = Debug|ARM
+ {BF9FF035-B976-4990-86FE-09D015E91C20}.Debug|ARM.Deploy.0 = Debug|ARM
+ {BF9FF035-B976-4990-86FE-09D015E91C20}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {BF9FF035-B976-4990-86FE-09D015E91C20}.Debug|ARM64.Build.0 = Debug|ARM64
+ {BF9FF035-B976-4990-86FE-09D015E91C20}.Debug|ARM64.Deploy.0 = Debug|ARM64
+ {BF9FF035-B976-4990-86FE-09D015E91C20}.Debug|x64.ActiveCfg = Debug|x64
+ {BF9FF035-B976-4990-86FE-09D015E91C20}.Debug|x64.Build.0 = Debug|x64
+ {BF9FF035-B976-4990-86FE-09D015E91C20}.Debug|x64.Deploy.0 = Debug|x64
+ {BF9FF035-B976-4990-86FE-09D015E91C20}.Debug|x86.ActiveCfg = Debug|Win32
+ {BF9FF035-B976-4990-86FE-09D015E91C20}.Debug|x86.Build.0 = Debug|Win32
+ {BF9FF035-B976-4990-86FE-09D015E91C20}.Debug|x86.Deploy.0 = Debug|Win32
+ {BF9FF035-B976-4990-86FE-09D015E91C20}.Release|ARM.ActiveCfg = Release|ARM
+ {BF9FF035-B976-4990-86FE-09D015E91C20}.Release|ARM.Build.0 = Release|ARM
+ {BF9FF035-B976-4990-86FE-09D015E91C20}.Release|ARM.Deploy.0 = Release|ARM
+ {BF9FF035-B976-4990-86FE-09D015E91C20}.Release|ARM64.ActiveCfg = Release|ARM64
+ {BF9FF035-B976-4990-86FE-09D015E91C20}.Release|ARM64.Build.0 = Release|ARM64
+ {BF9FF035-B976-4990-86FE-09D015E91C20}.Release|ARM64.Deploy.0 = Release|ARM64
+ {BF9FF035-B976-4990-86FE-09D015E91C20}.Release|x64.ActiveCfg = Release|x64
+ {BF9FF035-B976-4990-86FE-09D015E91C20}.Release|x64.Build.0 = Release|x64
+ {BF9FF035-B976-4990-86FE-09D015E91C20}.Release|x64.Deploy.0 = Release|x64
+ {BF9FF035-B976-4990-86FE-09D015E91C20}.Release|x86.ActiveCfg = Release|Win32
+ {BF9FF035-B976-4990-86FE-09D015E91C20}.Release|x86.Build.0 = Release|Win32
+ {BF9FF035-B976-4990-86FE-09D015E91C20}.Release|x86.Deploy.0 = Release|Win32
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|ARM.ActiveCfg = Debug|ARM
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|ARM.Build.0 = Debug|ARM
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|ARM64.Build.0 = Debug|ARM64
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|x64.ActiveCfg = Debug|x64
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|x64.Build.0 = Debug|x64
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|x86.ActiveCfg = Debug|Win32
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|x86.Build.0 = Debug|Win32
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|ARM.ActiveCfg = Release|ARM
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|ARM.Build.0 = Release|ARM
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|ARM64.ActiveCfg = Release|ARM64
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|ARM64.Build.0 = Release|ARM64
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x64.ActiveCfg = Release|x64
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x64.Build.0 = Release|x64
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x86.ActiveCfg = Release|Win32
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x86.Build.0 = Release|Win32
+ {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|ARM.ActiveCfg = Debug|ARM
+ {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|ARM.Build.0 = Debug|ARM
+ {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|ARM64.Build.0 = Debug|ARM64
+ {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|x64.ActiveCfg = Debug|x64
+ {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|x64.Build.0 = Debug|x64
+ {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|x86.ActiveCfg = Debug|Win32
+ {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|x86.Build.0 = Debug|Win32
+ {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|ARM.ActiveCfg = Release|ARM
+ {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|ARM.Build.0 = Release|ARM
+ {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|ARM64.ActiveCfg = Release|ARM64
+ {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|ARM64.Build.0 = Release|ARM64
+ {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x64.ActiveCfg = Release|x64
+ {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x64.Build.0 = Release|x64
+ {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x86.ActiveCfg = Release|Win32
+ {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x86.Build.0 = Release|Win32
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|ARM.ActiveCfg = Debug|ARM
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|ARM.Build.0 = Debug|ARM
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|ARM64.Build.0 = Debug|ARM64
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|x64.ActiveCfg = Debug|x64
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|x64.Build.0 = Debug|x64
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|x86.ActiveCfg = Debug|Win32
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|x86.Build.0 = Debug|Win32
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|ARM.ActiveCfg = Release|ARM
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|ARM.Build.0 = Release|ARM
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|ARM64.ActiveCfg = Release|ARM64
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|ARM64.Build.0 = Release|ARM64
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x64.ActiveCfg = Release|x64
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x64.Build.0 = Release|x64
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x86.ActiveCfg = Release|Win32
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x86.Build.0 = Release|Win32
+ {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|ARM.ActiveCfg = Debug|ARM
+ {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|ARM.Build.0 = Debug|ARM
+ {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|ARM64.Build.0 = Debug|ARM64
+ {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|x64.ActiveCfg = Debug|x64
+ {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|x64.Build.0 = Debug|x64
+ {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|x86.ActiveCfg = Debug|Win32
+ {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|x86.Build.0 = Debug|Win32
+ {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|ARM.ActiveCfg = Release|ARM
+ {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|ARM.Build.0 = Release|ARM
+ {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|ARM64.ActiveCfg = Release|ARM64
+ {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|ARM64.Build.0 = Release|ARM64
+ {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|x64.ActiveCfg = Release|x64
+ {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|x64.Build.0 = Release|x64
+ {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|x86.ActiveCfg = Release|Win32
+ {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|x86.Build.0 = Release|Win32
+ {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|ARM.ActiveCfg = Debug|ARM
+ {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|ARM.Build.0 = Debug|ARM
+ {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|ARM64.Build.0 = Debug|ARM64
+ {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|x64.ActiveCfg = Debug|x64
+ {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|x64.Build.0 = Debug|x64
+ {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|x86.ActiveCfg = Debug|Win32
+ {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|x86.Build.0 = Debug|Win32
+ {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|ARM.ActiveCfg = Release|ARM
+ {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|ARM.Build.0 = Release|ARM
+ {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|ARM64.ActiveCfg = Release|ARM64
+ {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|ARM64.Build.0 = Release|ARM64
+ {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x64.ActiveCfg = Release|x64
+ {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x64.Build.0 = Release|x64
+ {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x86.ActiveCfg = Release|Win32
+ {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x86.Build.0 = Release|Win32
+ {0D1E54D3-4BE1-4DAF-98BF-124C28C85014}.Debug|ARM.ActiveCfg = Debug|ARM
+ {0D1E54D3-4BE1-4DAF-98BF-124C28C85014}.Debug|ARM.Build.0 = Debug|ARM
+ {0D1E54D3-4BE1-4DAF-98BF-124C28C85014}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {0D1E54D3-4BE1-4DAF-98BF-124C28C85014}.Debug|ARM64.Build.0 = Debug|ARM64
+ {0D1E54D3-4BE1-4DAF-98BF-124C28C85014}.Debug|x64.ActiveCfg = Debug|x64
+ {0D1E54D3-4BE1-4DAF-98BF-124C28C85014}.Debug|x64.Build.0 = Debug|x64
+ {0D1E54D3-4BE1-4DAF-98BF-124C28C85014}.Debug|x86.ActiveCfg = Debug|Win32
+ {0D1E54D3-4BE1-4DAF-98BF-124C28C85014}.Debug|x86.Build.0 = Debug|Win32
+ {0D1E54D3-4BE1-4DAF-98BF-124C28C85014}.Release|ARM.ActiveCfg = Release|ARM
+ {0D1E54D3-4BE1-4DAF-98BF-124C28C85014}.Release|ARM.Build.0 = Release|ARM
+ {0D1E54D3-4BE1-4DAF-98BF-124C28C85014}.Release|ARM64.ActiveCfg = Release|ARM64
+ {0D1E54D3-4BE1-4DAF-98BF-124C28C85014}.Release|ARM64.Build.0 = Release|ARM64
+ {0D1E54D3-4BE1-4DAF-98BF-124C28C85014}.Release|x64.ActiveCfg = Release|x64
+ {0D1E54D3-4BE1-4DAF-98BF-124C28C85014}.Release|x64.Build.0 = Release|x64
+ {0D1E54D3-4BE1-4DAF-98BF-124C28C85014}.Release|x86.ActiveCfg = Release|Win32
+ {0D1E54D3-4BE1-4DAF-98BF-124C28C85014}.Release|x86.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {A990658C-CE31-4BCC-976F-0FC6B1AF693D} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}
+ {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}
+ {C38970C0-5FBF-4D69-90D8-CBAC225AE895} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}
+ {F7D32BD0-2749-483E-9A0D-1635EF7E3136} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}
+ {0CC28589-39E4-4288-B162-97B959F8B843} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}
+ {A62D504A-16B8-41D2-9F19-E2E86019E5E4} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}
+ {DA8B35B3-DA00-4B02-BDE6-6A397B3FD46B} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}
+ {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}
+ {2049DBE9-8D13-42C9-AE4B-413AE38FFFD0} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}
+ {84E05BFA-CBAF-4F0D-BFB6-4CE85742A57E} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}
+ {EF074BA1-2D54-4D49-A28E-5E040B47CD2E} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {D43FAD39-F619-437D-BB40-04A3982ACB6A}
+ EndGlobalSection
+EndGlobal
diff --git a/examples/basic/windows/VideoPlayer/.gitignore b/examples/basic/windows/VideoPlayer/.gitignore
new file mode 100644
index 00000000..917243bd
--- /dev/null
+++ b/examples/basic/windows/VideoPlayer/.gitignore
@@ -0,0 +1 @@
+/Bundle
diff --git a/examples/basic/windows/VideoPlayer/App.cpp b/examples/basic/windows/VideoPlayer/App.cpp
new file mode 100644
index 00000000..2379674e
--- /dev/null
+++ b/examples/basic/windows/VideoPlayer/App.cpp
@@ -0,0 +1,79 @@
+#include "pch.h"
+
+#include "App.h"
+
+#include "AutolinkedNativeModules.g.h"
+#include "ReactPackageProvider.h"
+
+using namespace winrt::videoplayer;
+using namespace winrt::videoplayer::implementation;
+using namespace winrt;
+using namespace Windows::UI::Xaml;
+using namespace Windows::UI::Xaml::Controls;
+using namespace Windows::UI::Xaml::Navigation;
+using namespace Windows::ApplicationModel;
+
+///
+/// Initializes the singleton application object. This is the first line of
+/// authored code executed, and as such is the logical equivalent of main() or
+/// WinMain().
+///
+App::App() noexcept
+{
+#if BUNDLE
+ JavaScriptBundleFile(L"src/index.windows");
+ InstanceSettings().UseWebDebugger(false);
+ InstanceSettings().UseFastRefresh(false);
+#else
+ JavaScriptMainModuleName(L"src/index");
+ InstanceSettings().UseWebDebugger(true);
+ InstanceSettings().UseFastRefresh(true);
+#endif
+
+#if _DEBUG
+ InstanceSettings().UseDeveloperSupport(true);
+#else
+ InstanceSettings().UseDeveloperSupport(false);
+#endif
+
+ RegisterAutolinkedNativeModulePackages(PackageProviders()); // Includes any autolinked modules
+
+ PackageProviders().Append(make()); // Includes all modules in this project
+
+ InitializeComponent();
+}
+
+///
+/// Invoked when the application is launched normally by the end user. Other entry points
+/// will be used such as when the application is launched to open a specific file.
+///
+/// Details about the launch request and process.
+void App::OnLaunched(activation::LaunchActivatedEventArgs const& e)
+{
+ super::OnLaunched(e);
+
+ Frame rootFrame = Window::Current().Content().as ();
+ rootFrame.Navigate(xaml_typename(), box_value(e.Arguments()));
+}
+
+///
+/// Invoked when application execution is being suspended. Application state is saved
+/// without knowing whether the application will be terminated or resumed with the contents
+/// of memory still intact.
+///
+/// The source of the suspend request.
+/// Details about the suspend request.
+void App::OnSuspending([[maybe_unused]] IInspectable const& sender, [[maybe_unused]] SuspendingEventArgs const& e)
+{
+ // Save application state and stop any background activity
+}
+
+///
+/// Invoked when Navigation to a certain page fails
+///
+/// The Frame which failed navigation
+/// Details about the navigation failure
+void App::OnNavigationFailed(IInspectable const&, NavigationFailedEventArgs const& e)
+{
+ throw hresult_error(E_FAIL, hstring(L"Failed to load Page ") + e.SourcePageType().Name);
+}
diff --git a/examples/basic/windows/VideoPlayer/App.h b/examples/basic/windows/VideoPlayer/App.h
new file mode 100644
index 00000000..16a53393
--- /dev/null
+++ b/examples/basic/windows/VideoPlayer/App.h
@@ -0,0 +1,18 @@
+#pragma once
+
+#include "App.xaml.g.h"
+
+namespace activation = winrt::Windows::ApplicationModel::Activation;
+
+namespace winrt::videoplayer::implementation
+{
+ struct App : AppT
+ {
+ App() noexcept;
+ void OnLaunched(activation::LaunchActivatedEventArgs const&);
+ void OnSuspending(IInspectable const&, Windows::ApplicationModel::SuspendingEventArgs const&);
+ void OnNavigationFailed(IInspectable const&, Windows::UI::Xaml::Navigation::NavigationFailedEventArgs const&);
+ private:
+ using super = AppT;
+ };
+} // namespace winrt::videoplayer::implementation
diff --git a/examples/basic/windows/VideoPlayer/App.idl b/examples/basic/windows/VideoPlayer/App.idl
new file mode 100644
index 00000000..e327b433
--- /dev/null
+++ b/examples/basic/windows/VideoPlayer/App.idl
@@ -0,0 +1,3 @@
+namespace videoplayer
+{
+}
diff --git a/examples/basic/windows/VideoPlayer/App.xaml b/examples/basic/windows/VideoPlayer/App.xaml
index 02a3efbb..f1d79c8c 100644
--- a/examples/basic/windows/VideoPlayer/App.xaml
+++ b/examples/basic/windows/VideoPlayer/App.xaml
@@ -1,8 +1,10 @@
-
-
-
+
+
+
+
+
diff --git a/examples/basic/windows/VideoPlayer/App.xaml.cs b/examples/basic/windows/VideoPlayer/App.xaml.cs
deleted file mode 100644
index 491a7ce5..00000000
--- a/examples/basic/windows/VideoPlayer/App.xaml.cs
+++ /dev/null
@@ -1,112 +0,0 @@
-using ReactNative;
-using System;
-using Windows.ApplicationModel;
-using Windows.ApplicationModel.Activation;
-using Windows.UI.Core;
-using Windows.UI.Xaml;
-using Windows.UI.Xaml.Controls;
-using Windows.UI.Xaml.Navigation;
-
-namespace VideoPlayer
-{
- ///
- /// Provides application-specific behavior to supplement the default Application class.
- ///
- sealed partial class App : Application
- {
- private readonly ReactPage _reactPage;
-
- ///
- /// Initializes the singleton application object. This is the first line of authored code
- /// executed, and as such is the logical equivalent of main() or WinMain().
- ///
- public App()
- {
- this.InitializeComponent();
- this.Suspending += OnSuspending;
- this.Resuming += OnResuming;
-
- _reactPage = new MainPage();
- }
-
- ///
- /// Invoked when the application is launched normally by the end user. Other entry points
- /// will be used such as when the application is launched to open a specific file.
- ///
- /// Details about the launch request and process.
- protected override void OnLaunched(LaunchActivatedEventArgs e)
- {
- _reactPage.OnResume(Exit);
-
-#if DEBUG
- if (System.Diagnostics.Debugger.IsAttached)
- {
- this.DebugSettings.EnableFrameRateCounter = true;
- }
-
- SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility =
- AppViewBackButtonVisibility.Visible;
-#endif
-
- Frame rootFrame = Window.Current.Content as Frame;
-
- // Do not repeat app initialization when the Window already has content,
- // just ensure that the window is active
- if (rootFrame == null)
- {
- _reactPage.OnCreate(e.Arguments);
-
- // Create a Frame to act as the navigation context and navigate to the first page
- rootFrame = new Frame();
-
- rootFrame.NavigationFailed += OnNavigationFailed;
-
- // Place the frame in the current Window
- Window.Current.Content = rootFrame;
- }
-
- if (rootFrame.Content == null)
- {
- // When the navigation stack isn't restored navigate to the first page,
- // configuring the new page by passing required information as a navigation
- // parameter
- rootFrame.Content = _reactPage;
- }
-
- // Ensure the current window is active
- Window.Current.Activate();
- }
-
- ///
- /// Invoked when Navigation to a certain page fails
- ///
- /// The Frame which failed navigation
- /// Details about the navigation failure
- void OnNavigationFailed(object sender, NavigationFailedEventArgs e)
- {
- throw new Exception("Failed to load Page " + e.SourcePageType.FullName);
- }
-
- ///
- /// Invoked when application execution is being suspended. Application state is saved
- /// without knowing whether the application will be terminated or resumed with the contents
- /// of memory still intact.
- ///
- /// The source of the suspend request.
- /// Details about the suspend request.
- private void OnSuspending(object sender, SuspendingEventArgs e)
- {
- _reactPage.OnSuspend();
- }
-
- ///
- /// Invoked when application execution is being resumed.
- ///
- /// The source of the resume request.
- /// Details about the resume request.
- private void OnResuming(object sender, object e)
- {
- _reactPage.OnResume(Exit);
- }
- }
-}
diff --git a/examples/basic/windows/VideoPlayer/AutolinkedNativeModules.g.cpp b/examples/basic/windows/VideoPlayer/AutolinkedNativeModules.g.cpp
new file mode 100644
index 00000000..440fd52f
--- /dev/null
+++ b/examples/basic/windows/VideoPlayer/AutolinkedNativeModules.g.cpp
@@ -0,0 +1,18 @@
+// AutolinkedNativeModules.g.cpp contents generated by "react-native autolink-windows"
+// clang-format off
+#include "pch.h"
+#include "AutolinkedNativeModules.g.h"
+
+// Includes from react-native-video
+#include
+
+namespace winrt::Microsoft::ReactNative
+{
+
+void RegisterAutolinkedNativeModulePackages(winrt::Windows::Foundation::Collections::IVector const& packageProviders)
+{
+ // IReactPackageProviders from react-native-video
+ packageProviders.Append(winrt::ReactNativeVideoCPP::ReactPackageProvider());
+}
+
+}
diff --git a/examples/basic/windows/VideoPlayer/AutolinkedNativeModules.g.h b/examples/basic/windows/VideoPlayer/AutolinkedNativeModules.g.h
new file mode 100644
index 00000000..f28bb8be
--- /dev/null
+++ b/examples/basic/windows/VideoPlayer/AutolinkedNativeModules.g.h
@@ -0,0 +1,10 @@
+// AutolinkedNativeModules.g.h contents generated by "react-native autolink-windows"
+// clang-format off
+#pragma once
+
+namespace winrt::Microsoft::ReactNative
+{
+
+void RegisterAutolinkedNativeModulePackages(winrt::Windows::Foundation::Collections::IVector const& packageProviders);
+
+}
diff --git a/examples/basic/windows/VideoPlayer/AutolinkedNativeModules.g.props b/examples/basic/windows/VideoPlayer/AutolinkedNativeModules.g.props
new file mode 100644
index 00000000..f5db933f
--- /dev/null
+++ b/examples/basic/windows/VideoPlayer/AutolinkedNativeModules.g.props
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/basic/windows/VideoPlayer/AutolinkedNativeModules.g.targets b/examples/basic/windows/VideoPlayer/AutolinkedNativeModules.g.targets
new file mode 100644
index 00000000..c2025402
--- /dev/null
+++ b/examples/basic/windows/VideoPlayer/AutolinkedNativeModules.g.targets
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+ {0d1e54d3-4be1-4daf-98bf-124c28c85014}
+
+
+
diff --git a/examples/basic/windows/VideoPlayer/MainPage.cpp b/examples/basic/windows/VideoPlayer/MainPage.cpp
new file mode 100644
index 00000000..b94a5052
--- /dev/null
+++ b/examples/basic/windows/VideoPlayer/MainPage.cpp
@@ -0,0 +1,20 @@
+#include "pch.h"
+#include "MainPage.h"
+#if __has_include("MainPage.g.cpp")
+#include "MainPage.g.cpp"
+#endif
+
+#include "App.h"
+
+using namespace winrt;
+using namespace Windows::UI::Xaml;
+
+namespace winrt::videoplayer::implementation
+{
+ MainPage::MainPage()
+ {
+ InitializeComponent();
+ auto app = Application::Current().as();
+ ReactRootView().ReactNativeHost(app->Host());
+ }
+}
diff --git a/examples/basic/windows/VideoPlayer/MainPage.cs b/examples/basic/windows/VideoPlayer/MainPage.cs
deleted file mode 100644
index 4db71186..00000000
--- a/examples/basic/windows/VideoPlayer/MainPage.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-using ReactNative;
-using ReactNative.Modules.Core;
-using ReactNative.Shell;
-using ReactNativeVideo;
-using System.Collections.Generic;
-using Windows.UI.Xaml.Media.Imaging;
-
-namespace VideoPlayer
-{
- class MainPage : ReactPage
- {
- public override string MainComponentName
- {
- get
- {
- return "VideoPlayer";
- }
- }
-
-#if BUNDLE
- public override string JavaScriptBundleFile
- {
- get
- {
- return "ms-appx:///ReactAssets/index.windows.bundle";
- }
- }
-#endif
-
- public override List Packages
- {
- get
- {
- return new List
- {
- new MainReactPackage(),
- new ReactVideoPackage(),
- };
- }
- }
-
- public override bool UseDeveloperSupport
- {
- get
- {
-#if !BUNDLE || DEBUG
- return true;
-#else
- return false;
-#endif
- }
- }
- }
-
-}
diff --git a/examples/basic/windows/VideoPlayer/MainPage.h b/examples/basic/windows/VideoPlayer/MainPage.h
new file mode 100644
index 00000000..390ab853
--- /dev/null
+++ b/examples/basic/windows/VideoPlayer/MainPage.h
@@ -0,0 +1,19 @@
+#pragma once
+#include "MainPage.g.h"
+#include
+
+namespace winrt::videoplayer::implementation
+{
+ struct MainPage : MainPageT
+ {
+ MainPage();
+ };
+}
+
+namespace winrt::videoplayer::factory_implementation
+{
+ struct MainPage : MainPageT
+ {
+ };
+}
+
diff --git a/examples/basic/windows/VideoPlayer/MainPage.idl b/examples/basic/windows/VideoPlayer/MainPage.idl
new file mode 100644
index 00000000..051fd75e
--- /dev/null
+++ b/examples/basic/windows/VideoPlayer/MainPage.idl
@@ -0,0 +1,8 @@
+namespace videoplayer
+{
+ [default_interface]
+ runtimeclass MainPage : Windows.UI.Xaml.Controls.Page
+ {
+ MainPage();
+ }
+}
diff --git a/examples/basic/windows/VideoPlayer/MainPage.xaml b/examples/basic/windows/VideoPlayer/MainPage.xaml
new file mode 100644
index 00000000..ca697091
--- /dev/null
+++ b/examples/basic/windows/VideoPlayer/MainPage.xaml
@@ -0,0 +1,16 @@
+
+
+
diff --git a/examples/basic/windows/VideoPlayer/Package.appxmanifest b/examples/basic/windows/VideoPlayer/Package.appxmanifest
index be303ca5..f594008c 100644
--- a/examples/basic/windows/VideoPlayer/Package.appxmanifest
+++ b/examples/basic/windows/VideoPlayer/Package.appxmanifest
@@ -1,49 +1,50 @@
-
-
-
-
-
-
-
-
-
- VideoPlayer
- React Native for UWP
- Assets\StoreLogo.png
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+ videoplayer
+ nickf
+ Assets\StoreLogo.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/basic/windows/VideoPlayer/Properties/AssemblyInfo.cs b/examples/basic/windows/VideoPlayer/Properties/AssemblyInfo.cs
deleted file mode 100644
index cb6ff6b7..00000000
--- a/examples/basic/windows/VideoPlayer/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("VideoPlayer")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("VideoPlayer")]
-[assembly: AssemblyCopyright("Copyright © 2016")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
-[assembly: ComVisible(false)]
\ No newline at end of file
diff --git a/examples/basic/windows/VideoPlayer/Properties/Default.rd.xml b/examples/basic/windows/VideoPlayer/Properties/Default.rd.xml
deleted file mode 100644
index 86952373..00000000
--- a/examples/basic/windows/VideoPlayer/Properties/Default.rd.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/examples/basic/windows/VideoPlayer/PropertySheet.props b/examples/basic/windows/VideoPlayer/PropertySheet.props
new file mode 100644
index 00000000..5942ba39
--- /dev/null
+++ b/examples/basic/windows/VideoPlayer/PropertySheet.props
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/basic/windows/VideoPlayer/ReactPackageProvider.cpp b/examples/basic/windows/VideoPlayer/ReactPackageProvider.cpp
new file mode 100644
index 00000000..713453d9
--- /dev/null
+++ b/examples/basic/windows/VideoPlayer/ReactPackageProvider.cpp
@@ -0,0 +1,15 @@
+#include "pch.h"
+#include "ReactPackageProvider.h"
+#include "NativeModules.h"
+
+using namespace winrt::Microsoft::ReactNative;
+
+namespace winrt::videoplayer::implementation
+{
+
+void ReactPackageProvider::CreatePackage(IReactPackageBuilder const &packageBuilder) noexcept
+{
+ AddAttributedModules(packageBuilder);
+}
+
+} // namespace winrt::videoplayer::implementation
diff --git a/examples/basic/windows/VideoPlayer/ReactPackageProvider.h b/examples/basic/windows/VideoPlayer/ReactPackageProvider.h
new file mode 100644
index 00000000..5f8a4cfe
--- /dev/null
+++ b/examples/basic/windows/VideoPlayer/ReactPackageProvider.h
@@ -0,0 +1,13 @@
+#pragma once
+
+#include "winrt/Microsoft.ReactNative.h"
+
+namespace winrt::videoplayer::implementation
+{
+ struct ReactPackageProvider : winrt::implements
+ {
+ public: // IReactPackageProvider
+ void CreatePackage(winrt::Microsoft::ReactNative::IReactPackageBuilder const &packageBuilder) noexcept;
+ };
+} // namespace winrt::videoplayer::implementation
+
diff --git a/examples/basic/windows/VideoPlayer/VideoPlayer.csproj b/examples/basic/windows/VideoPlayer/VideoPlayer.csproj
deleted file mode 100644
index 96611032..00000000
--- a/examples/basic/windows/VideoPlayer/VideoPlayer.csproj
+++ /dev/null
@@ -1,230 +0,0 @@
-
-
-
-
- Debug
- x86
- {A027BE54-D118-49A4-8D84-0666A2A93E64}
- AppContainerExe
- Properties
- VideoPlayer
- VideoPlayer
- en-US
- UAP
- 10.0.14393.0
- 10.0.10586.0
- 14
- 512
- {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
- VideoPlayer_TemporaryKey.pfx
-
-
- true
- bin\x86\Debug\
- DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
- ;2008
- full
- x86
- false
- prompt
- true
-
-
- true
- bin\x86\DebugBundle\
- DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;CODE_ANALYSIS;BUNDLE
- ;2008
- true
- full
- x86
- false
- prompt
- MinimumRecommendedRules.ruleset
- true
-
-
- bin\x86\Release\
- TRACE;NETFX_CORE;WINDOWS_UWP
- true
- ;2008
- pdbonly
- x86
- false
- prompt
- true
- true
-
-
- bin\x86\ReleaseBundle\
- TRACE;NETFX_CORE;WINDOWS_UWP;CODE_ANALYSIS;BUNDLE
- true
- ;2008
- true
- pdbonly
- x86
- false
- prompt
- MinimumRecommendedRules.ruleset
- true
- true
-
-
- true
- bin\ARM\Debug\
- DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
- ;2008
- full
- ARM
- false
- prompt
- true
-
-
- true
- bin\ARM\DebugBundle\
- DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;CODE_ANALYSIS;BUNDLE
- ;2008
- true
- full
- ARM
- false
- prompt
- MinimumRecommendedRules.ruleset
- true
-
-
- bin\ARM\Release\
- TRACE;NETFX_CORE;WINDOWS_UWP
- true
- ;2008
- pdbonly
- ARM
- false
- prompt
- true
- true
-
-
- bin\ARM\ReleaseBundle\
- TRACE;NETFX_CORE;WINDOWS_UWP;CODE_ANALYSIS;BUNDLE
- true
- ;2008
- true
- pdbonly
- ARM
- false
- prompt
- MinimumRecommendedRules.ruleset
- true
- true
-
-
- true
- bin\x64\Debug\
- DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
- ;2008
- full
- x64
- false
- prompt
- true
-
-
- true
- bin\x64\DebugBundle\
- DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;CODE_ANALYSIS;BUNDLE
- ;2008
- true
- full
- x64
- false
- prompt
- MinimumRecommendedRules.ruleset
- true
-
-
- bin\x64\Release\
- TRACE;NETFX_CORE;WINDOWS_UWP
- true
- ;2008
- pdbonly
- x64
- false
- prompt
- true
- true
-
-
- bin\x64\ReleaseBundle\
- TRACE;NETFX_CORE;WINDOWS_UWP;CODE_ANALYSIS;BUNDLE
- true
- ;2008
- true
- pdbonly
- x64
- false
- prompt
- MinimumRecommendedRules.ruleset
- true
- true
-
-
-
-
-
-
-
- App.xaml
-
-
-
-
-
-
- Designer
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- MSBuild:Compile
- Designer
-
-
-
-
- {e8f5f57f-757e-4237-ad23-f7a8755427cd}
- ReactNativeVideo
-
-
- {c7673ad5-e3aa-468c-a5fd-fa38154e205c}
- ReactNative
-
-
-
-
- PreserveNewest
-
-
-
- 14.0
-
-
-
-
\ No newline at end of file
diff --git a/examples/basic/windows/VideoPlayer/VideoPlayer_TemporaryKey.pfx b/examples/basic/windows/VideoPlayer/VideoPlayer_TemporaryKey.pfx
index 08328fc1..b399e740 100644
Binary files a/examples/basic/windows/VideoPlayer/VideoPlayer_TemporaryKey.pfx and b/examples/basic/windows/VideoPlayer/VideoPlayer_TemporaryKey.pfx differ
diff --git a/examples/basic/windows/VideoPlayer/packages.config b/examples/basic/windows/VideoPlayer/packages.config
new file mode 100644
index 00000000..7ad3ffb8
--- /dev/null
+++ b/examples/basic/windows/VideoPlayer/packages.config
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/basic/windows/VideoPlayer/pch.cpp b/examples/basic/windows/VideoPlayer/pch.cpp
new file mode 100644
index 00000000..bcb5590b
--- /dev/null
+++ b/examples/basic/windows/VideoPlayer/pch.cpp
@@ -0,0 +1 @@
+#include "pch.h"
diff --git a/examples/basic/windows/VideoPlayer/pch.h b/examples/basic/windows/VideoPlayer/pch.h
new file mode 100644
index 00000000..13f3eecb
--- /dev/null
+++ b/examples/basic/windows/VideoPlayer/pch.h
@@ -0,0 +1,26 @@
+#pragma once
+
+#define NOMINMAX
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+
+#include
+#include
+#include
+#include
+#include
diff --git a/examples/basic/windows/VideoPlayer/project.json b/examples/basic/windows/VideoPlayer/project.json
deleted file mode 100644
index bf00b26b..00000000
--- a/examples/basic/windows/VideoPlayer/project.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "dependencies": {
- "Facebook.CSSLayout": "2.0.1-pre",
- "Microsoft.NETCore.UniversalWindowsPlatform": "5.2.2"
- },
- "frameworks": {
- "uap10.0": {}
- },
- "runtimes": {
- "win10-arm": {},
- "win10-arm-aot": {},
- "win10-x86": {},
- "win10-x86-aot": {},
- "win10-x64": {},
- "win10-x64-aot": {}
- }
-}
\ No newline at end of file
diff --git a/examples/basic/windows/VideoPlayer/videoplayer.vcxproj b/examples/basic/windows/VideoPlayer/videoplayer.vcxproj
new file mode 100644
index 00000000..ef950d93
--- /dev/null
+++ b/examples/basic/windows/VideoPlayer/videoplayer.vcxproj
@@ -0,0 +1,196 @@
+
+
+
+
+ true
+ true
+ true
+ {bf9ff035-b976-4990-86fe-09d015e91c20}
+ videoplayer
+ videoplayer
+ en-US
+ 16.0
+ true
+ Windows Store
+ 10.0
+ 10.0.18362.0
+ 10.0.16299.0
+ videoplayer_TemporaryKey.pfx
+ 740AAD66EBCE590C21351A8D4323BDD9FB477469
+ password
+
+
+
+ $([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), 'node_modules\react-native-windows\package.json'))\node_modules\react-native-windows\
+
+
+
+ Debug
+ ARM
+
+
+ Debug
+ ARM64
+
+
+ Debug
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ ARM
+
+
+ Release
+ ARM64
+
+
+ Release
+ Win32
+
+
+ Release
+ x64
+
+
+
+ Application
+ Unicode
+
+
+ true
+ true
+
+
+ false
+ true
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Use
+ pch.h
+ $(IntDir)pch.pch
+ Level4
+ %(AdditionalOptions) /bigobj
+ 4453;28204
+
+
+
+
+ _DEBUG;%(PreprocessorDefinitions)
+
+
+
+
+ NDEBUG;%(PreprocessorDefinitions)
+
+
+
+
+ MainPage.xaml
+ Code
+
+
+
+
+
+ App.xaml
+
+
+
+
+ Designer
+
+
+
+
+ Designer
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MainPage.xaml
+ Code
+
+
+
+
+ Create
+
+
+ App.xaml
+
+
+
+
+
+ App.xaml
+
+
+ MainPage.xaml
+ Code
+
+
+
+
+
+
+ false
+
+
+
+
+ Designer
+
+
+
+
+
+
+
+
+ This project references targets in your node_modules\react-native-windows folder. The missing file is {0}.
+
+
+
+
+
+
+
+
+
+
+ This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.
+
+
+
+
+
+
diff --git a/examples/basic/windows/VideoPlayer/videoplayer.vcxproj.filters b/examples/basic/windows/VideoPlayer/videoplayer.vcxproj.filters
new file mode 100644
index 00000000..2aa08b71
--- /dev/null
+++ b/examples/basic/windows/VideoPlayer/videoplayer.vcxproj.filters
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Assets
+
+
+ Assets
+
+
+ Assets
+
+
+ Assets
+
+
+ Assets
+
+
+ Assets
+
+
+ Assets
+
+
+
+
+
+
+
+ {e48dc53e-40b1-40cb-970a-f89935452892}
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/basic/yarn.lock b/examples/basic/yarn.lock
index 50d8d52e..bc9f9405 100644
--- a/examples/basic/yarn.lock
+++ b/examples/basic/yarn.lock
@@ -2,674 +2,738 @@
# yarn lockfile v1
-"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d"
- integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789"
+ integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==
dependencies:
- "@babel/highlight" "^7.0.0"
+ "@babel/highlight" "^7.16.7"
-"@babel/core@^7.0.0", "@babel/core@^7.1.0", "@babel/core@^7.6.0":
- version "7.6.0"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.0.tgz#9b00f73554edd67bebc86df8303ef678be3d7b48"
- integrity sha512-FuRhDRtsd6IptKpHXAa+4WPZYY2ZzgowkbLBecEDDSje1X/apG7jQM33or3NdOmjXBKWGOg4JmSiRfUfuTtHXw==
+"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.4":
+ version "7.16.8"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.8.tgz#31560f9f29fdf1868de8cb55049538a1b9732a60"
+ integrity sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==
+
+"@babel/core@^7.0.0", "@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.5", "@babel/core@^7.8.4":
+ version "7.16.12"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.12.tgz#5edc53c1b71e54881315923ae2aedea2522bb784"
+ integrity sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg==
dependencies:
- "@babel/code-frame" "^7.5.5"
- "@babel/generator" "^7.6.0"
- "@babel/helpers" "^7.6.0"
- "@babel/parser" "^7.6.0"
- "@babel/template" "^7.6.0"
- "@babel/traverse" "^7.6.0"
- "@babel/types" "^7.6.0"
- convert-source-map "^1.1.0"
+ "@babel/code-frame" "^7.16.7"
+ "@babel/generator" "^7.16.8"
+ "@babel/helper-compilation-targets" "^7.16.7"
+ "@babel/helper-module-transforms" "^7.16.7"
+ "@babel/helpers" "^7.16.7"
+ "@babel/parser" "^7.16.12"
+ "@babel/template" "^7.16.7"
+ "@babel/traverse" "^7.16.10"
+ "@babel/types" "^7.16.8"
+ convert-source-map "^1.7.0"
debug "^4.1.0"
- json5 "^2.1.0"
- lodash "^4.17.13"
- resolve "^1.3.2"
- semver "^5.4.1"
+ gensync "^1.0.0-beta.2"
+ json5 "^2.1.2"
+ semver "^6.3.0"
source-map "^0.5.0"
-"@babel/generator@^7.0.0", "@babel/generator@^7.4.0", "@babel/generator@^7.6.0":
- version "7.6.0"
- resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.0.tgz#e2c21efbfd3293ad819a2359b448f002bfdfda56"
- integrity sha512-Ms8Mo7YBdMMn1BYuNtKuP/z0TgEIhbcyB8HVR6PPNYp4P61lMsABiS4A3VG1qznjXVCf3r+fVHhm4efTYVsySA==
+"@babel/generator@^7.16.8", "@babel/generator@^7.5.0":
+ version "7.16.8"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.8.tgz#359d44d966b8cd059d543250ce79596f792f2ebe"
+ integrity sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==
dependencies:
- "@babel/types" "^7.6.0"
+ "@babel/types" "^7.16.8"
jsesc "^2.5.1"
- lodash "^4.17.13"
source-map "^0.5.0"
- trim-right "^1.0.1"
-"@babel/helper-annotate-as-pure@^7.0.0":
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32"
- integrity sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==
+"@babel/helper-annotate-as-pure@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862"
+ integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==
dependencies:
- "@babel/types" "^7.0.0"
+ "@babel/types" "^7.16.7"
-"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0":
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f"
- integrity sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==
+"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b"
+ integrity sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==
dependencies:
- "@babel/helper-explode-assignable-expression" "^7.1.0"
- "@babel/types" "^7.0.0"
+ "@babel/helper-explode-assignable-expression" "^7.16.7"
+ "@babel/types" "^7.16.7"
-"@babel/helper-builder-react-jsx@^7.3.0":
- version "7.3.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz#a1ac95a5d2b3e88ae5e54846bf462eeb81b318a4"
- integrity sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw==
+"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b"
+ integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==
dependencies:
- "@babel/types" "^7.3.0"
- esutils "^2.0.0"
+ "@babel/compat-data" "^7.16.4"
+ "@babel/helper-validator-option" "^7.16.7"
+ browserslist "^4.17.5"
+ semver "^6.3.0"
-"@babel/helper-call-delegate@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz#87c1f8ca19ad552a736a7a27b1c1fcf8b1ff1f43"
- integrity sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==
+"@babel/helper-create-class-features-plugin@^7.16.7":
+ version "7.16.10"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.10.tgz#8a6959b9cc818a88815ba3c5474619e9c0f2c21c"
+ integrity sha512-wDeej0pu3WN/ffTxMNCPW5UCiOav8IcLRxSIyp/9+IF2xJUM9h/OYjg0IJLHaL6F8oU8kqMz9nc1vryXhMsgXg==
dependencies:
- "@babel/helper-hoist-variables" "^7.4.4"
- "@babel/traverse" "^7.4.4"
- "@babel/types" "^7.4.4"
+ "@babel/helper-annotate-as-pure" "^7.16.7"
+ "@babel/helper-environment-visitor" "^7.16.7"
+ "@babel/helper-function-name" "^7.16.7"
+ "@babel/helper-member-expression-to-functions" "^7.16.7"
+ "@babel/helper-optimise-call-expression" "^7.16.7"
+ "@babel/helper-replace-supers" "^7.16.7"
+ "@babel/helper-split-export-declaration" "^7.16.7"
-"@babel/helper-create-class-features-plugin@^7.5.5", "@babel/helper-create-class-features-plugin@^7.6.0":
- version "7.6.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.6.0.tgz#769711acca889be371e9bc2eb68641d55218021f"
- integrity sha512-O1QWBko4fzGju6VoVvrZg0RROCVifcLxiApnGP3OWfWzvxRZFCoBD81K5ur5e3bVY2Vf/5rIJm8cqPKn8HUJng==
+"@babel/helper-create-regexp-features-plugin@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.7.tgz#0cb82b9bac358eb73bfbd73985a776bfa6b14d48"
+ integrity sha512-fk5A6ymfp+O5+p2yCkXAu5Kyj6v0xh0RBeNcAkYUMDvvAAoxvSKXn+Jb37t/yWFiQVDFK1ELpUTD8/aLhCPu+g==
dependencies:
- "@babel/helper-function-name" "^7.1.0"
- "@babel/helper-member-expression-to-functions" "^7.5.5"
- "@babel/helper-optimise-call-expression" "^7.0.0"
- "@babel/helper-plugin-utils" "^7.0.0"
- "@babel/helper-replace-supers" "^7.5.5"
- "@babel/helper-split-export-declaration" "^7.4.4"
+ "@babel/helper-annotate-as-pure" "^7.16.7"
+ regexpu-core "^4.7.1"
-"@babel/helper-define-map@^7.5.5":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz#3dec32c2046f37e09b28c93eb0b103fd2a25d369"
- integrity sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg==
+"@babel/helper-define-polyfill-provider@^0.3.1":
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665"
+ integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==
dependencies:
- "@babel/helper-function-name" "^7.1.0"
- "@babel/types" "^7.5.5"
- lodash "^4.17.13"
+ "@babel/helper-compilation-targets" "^7.13.0"
+ "@babel/helper-module-imports" "^7.12.13"
+ "@babel/helper-plugin-utils" "^7.13.0"
+ "@babel/traverse" "^7.13.0"
+ debug "^4.1.1"
+ lodash.debounce "^4.0.8"
+ resolve "^1.14.2"
+ semver "^6.1.2"
-"@babel/helper-explode-assignable-expression@^7.1.0":
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6"
- integrity sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==
+"@babel/helper-environment-visitor@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7"
+ integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==
dependencies:
- "@babel/traverse" "^7.1.0"
- "@babel/types" "^7.0.0"
+ "@babel/types" "^7.16.7"
-"@babel/helper-function-name@^7.1.0":
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53"
- integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==
+"@babel/helper-explode-assignable-expression@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a"
+ integrity sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==
dependencies:
- "@babel/helper-get-function-arity" "^7.0.0"
- "@babel/template" "^7.1.0"
- "@babel/types" "^7.0.0"
+ "@babel/types" "^7.16.7"
-"@babel/helper-get-function-arity@^7.0.0":
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3"
- integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==
+"@babel/helper-function-name@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f"
+ integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==
dependencies:
- "@babel/types" "^7.0.0"
+ "@babel/helper-get-function-arity" "^7.16.7"
+ "@babel/template" "^7.16.7"
+ "@babel/types" "^7.16.7"
-"@babel/helper-hoist-variables@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a"
- integrity sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==
+"@babel/helper-get-function-arity@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419"
+ integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==
dependencies:
- "@babel/types" "^7.4.4"
+ "@babel/types" "^7.16.7"
-"@babel/helper-member-expression-to-functions@^7.5.5":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz#1fb5b8ec4453a93c439ee9fe3aeea4a84b76b590"
- integrity sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA==
+"@babel/helper-hoist-variables@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246"
+ integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==
dependencies:
- "@babel/types" "^7.5.5"
+ "@babel/types" "^7.16.7"
-"@babel/helper-module-imports@^7.0.0":
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d"
- integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==
+"@babel/helper-member-expression-to-functions@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz#42b9ca4b2b200123c3b7e726b0ae5153924905b0"
+ integrity sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==
dependencies:
- "@babel/types" "^7.0.0"
+ "@babel/types" "^7.16.7"
-"@babel/helper-module-transforms@^7.4.4":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz#f84ff8a09038dcbca1fd4355661a500937165b4a"
- integrity sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw==
+"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437"
+ integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==
dependencies:
- "@babel/helper-module-imports" "^7.0.0"
- "@babel/helper-simple-access" "^7.1.0"
- "@babel/helper-split-export-declaration" "^7.4.4"
- "@babel/template" "^7.4.4"
- "@babel/types" "^7.5.5"
- lodash "^4.17.13"
+ "@babel/types" "^7.16.7"
-"@babel/helper-optimise-call-expression@^7.0.0":
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5"
- integrity sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==
+"@babel/helper-module-transforms@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz#7665faeb721a01ca5327ddc6bba15a5cb34b6a41"
+ integrity sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==
dependencies:
- "@babel/types" "^7.0.0"
+ "@babel/helper-environment-visitor" "^7.16.7"
+ "@babel/helper-module-imports" "^7.16.7"
+ "@babel/helper-simple-access" "^7.16.7"
+ "@babel/helper-split-export-declaration" "^7.16.7"
+ "@babel/helper-validator-identifier" "^7.16.7"
+ "@babel/template" "^7.16.7"
+ "@babel/traverse" "^7.16.7"
+ "@babel/types" "^7.16.7"
-"@babel/helper-plugin-utils@^7.0.0":
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250"
- integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==
-
-"@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.5.5.tgz#0aa6824f7100a2e0e89c1527c23936c152cab351"
- integrity sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==
+"@babel/helper-optimise-call-expression@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2"
+ integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==
dependencies:
- lodash "^4.17.13"
+ "@babel/types" "^7.16.7"
-"@babel/helper-remap-async-to-generator@^7.1.0":
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f"
- integrity sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==
- dependencies:
- "@babel/helper-annotate-as-pure" "^7.0.0"
- "@babel/helper-wrap-function" "^7.1.0"
- "@babel/template" "^7.1.0"
- "@babel/traverse" "^7.1.0"
- "@babel/types" "^7.0.0"
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5"
+ integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==
-"@babel/helper-replace-supers@^7.5.5":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz#f84ce43df031222d2bad068d2626cb5799c34bc2"
- integrity sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg==
+"@babel/helper-replace-supers@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1"
+ integrity sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==
dependencies:
- "@babel/helper-member-expression-to-functions" "^7.5.5"
- "@babel/helper-optimise-call-expression" "^7.0.0"
- "@babel/traverse" "^7.5.5"
- "@babel/types" "^7.5.5"
+ "@babel/helper-environment-visitor" "^7.16.7"
+ "@babel/helper-member-expression-to-functions" "^7.16.7"
+ "@babel/helper-optimise-call-expression" "^7.16.7"
+ "@babel/traverse" "^7.16.7"
+ "@babel/types" "^7.16.7"
-"@babel/helper-simple-access@^7.1.0":
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c"
- integrity sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==
+"@babel/helper-simple-access@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7"
+ integrity sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==
dependencies:
- "@babel/template" "^7.1.0"
- "@babel/types" "^7.0.0"
+ "@babel/types" "^7.16.7"
-"@babel/helper-split-export-declaration@^7.4.4":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677"
- integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==
+"@babel/helper-skip-transparent-expression-wrappers@^7.16.0":
+ version "7.16.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09"
+ integrity sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==
dependencies:
- "@babel/types" "^7.4.4"
+ "@babel/types" "^7.16.0"
-"@babel/helper-wrap-function@^7.1.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa"
- integrity sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==
+"@babel/helper-split-export-declaration@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b"
+ integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==
dependencies:
- "@babel/helper-function-name" "^7.1.0"
- "@babel/template" "^7.1.0"
- "@babel/traverse" "^7.1.0"
- "@babel/types" "^7.2.0"
+ "@babel/types" "^7.16.7"
-"@babel/helpers@^7.6.0":
- version "7.6.0"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.6.0.tgz#21961d16c6a3c3ab597325c34c465c0887d31c6e"
- integrity sha512-W9kao7OBleOjfXtFGgArGRX6eCP0UEcA2ZWEWNkJdRZnHhW4eEbeswbG3EwaRsnQUAEGWYgMq1HsIXuNNNy2eQ==
- dependencies:
- "@babel/template" "^7.6.0"
- "@babel/traverse" "^7.6.0"
- "@babel/types" "^7.6.0"
+"@babel/helper-validator-identifier@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad"
+ integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==
-"@babel/highlight@^7.0.0":
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4"
- integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==
+"@babel/helper-validator-option@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23"
+ integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==
+
+"@babel/helpers@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.16.7.tgz#7e3504d708d50344112767c3542fc5e357fffefc"
+ integrity sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==
dependencies:
+ "@babel/template" "^7.16.7"
+ "@babel/traverse" "^7.16.7"
+ "@babel/types" "^7.16.7"
+
+"@babel/highlight@^7.16.7":
+ version "7.16.10"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88"
+ integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.16.7"
chalk "^2.0.0"
- esutils "^2.0.2"
js-tokens "^4.0.0"
-"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.6.0":
- version "7.6.0"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.0.tgz#3e05d0647432a8326cb28d0de03895ae5a57f39b"
- integrity sha512-+o2q111WEx4srBs7L9eJmcwi655eD8sXniLqMB93TBK9GrNzGrxDWSjiqz2hLU0Ha8MTXFIP0yd9fNdP+m43ZQ==
+"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.10", "@babel/parser@^7.16.12", "@babel/parser@^7.16.7", "@babel/parser@^7.7.0":
+ version "7.16.12"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.12.tgz#9474794f9a650cf5e2f892444227f98e28cdf8b6"
+ integrity sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A==
"@babel/plugin-external-helpers@^7.0.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-external-helpers/-/plugin-external-helpers-7.2.0.tgz#7f4cb7dee651cd380d2034847d914288467a6be4"
- integrity sha512-QFmtcCShFkyAsNtdCM3lJPmRe1iB+vPZymlB4LnDIKEBj2yKQLQKtoxXxJ8ePT5fwMl4QGg303p4mB0UsSI2/g==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-external-helpers/-/plugin-external-helpers-7.16.7.tgz#dd91e9b22d52f606461e7fcb4dc99a8b3392dd84"
+ integrity sha512-3MvRbPgl957CR3ZMeW/ukGrKDM3+m5vtTkgrBAKKbUgrAkb1molwjRqUvAYsCnwboN1vXgHStotdhAvTgQS/Gw==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.16.7"
"@babel/plugin-proposal-class-properties@^7.0.0":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.5.5.tgz#a974cfae1e37c3110e71f3c6a2e48b8e71958cd4"
- integrity sha512-AF79FsnWFxjlaosgdi421vmYG6/jg79bVD0dpD44QdgobzHKuLZ6S3vl8la9qIeSwGi8i1fS0O1mfuDAAdo1/A==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0"
+ integrity sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==
dependencies:
- "@babel/helper-create-class-features-plugin" "^7.5.5"
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-create-class-features-plugin" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.16.7"
"@babel/plugin-proposal-export-default-from@^7.0.0":
- version "7.5.2"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.5.2.tgz#2c0ac2dcc36e3b2443fead2c3c5fc796fb1b5145"
- integrity sha512-wr9Itk05L1/wyyZKVEmXWCdcsp/e185WUNl6AfYZeEKYaUPPvHXRDqO5K1VH7/UamYqGJowFRuCv30aDYZawsg==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.16.7.tgz#a40ab158ca55627b71c5513f03d3469026a9e929"
+ integrity sha512-+cENpW1rgIjExn+o5c8Jw/4BuH4eGKKYvkMB8/0ZxFQ9mC0t4z09VsPIwNg6waF69QYC81zxGeAsREGuqQoKeg==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
- "@babel/plugin-syntax-export-default-from" "^7.2.0"
+ "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/plugin-syntax-export-default-from" "^7.16.7"
"@babel/plugin-proposal-nullish-coalescing-operator@^7.0.0":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.4.4.tgz#41c360d59481d88e0ce3a3f837df10121a769b39"
- integrity sha512-Amph7Epui1Dh/xxUxS2+K22/MUi6+6JVTvy3P58tja3B6yKTSjwwx0/d83rF7551D6PVSSoplQb8GCwqec7HRw==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99"
+ integrity sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
- "@babel/plugin-syntax-nullish-coalescing-operator" "^7.2.0"
+ "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
"@babel/plugin-proposal-object-rest-spread@^7.0.0":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz#61939744f71ba76a3ae46b5eea18a54c16d22e58"
- integrity sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz#94593ef1ddf37021a25bdcb5754c4a8d534b01d8"
+ integrity sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
- "@babel/plugin-syntax-object-rest-spread" "^7.2.0"
+ "@babel/compat-data" "^7.16.4"
+ "@babel/helper-compilation-targets" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+ "@babel/plugin-transform-parameters" "^7.16.7"
"@babel/plugin-proposal-optional-catch-binding@^7.0.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5"
- integrity sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf"
+ integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
- "@babel/plugin-syntax-optional-catch-binding" "^7.2.0"
+ "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
"@babel/plugin-proposal-optional-chaining@^7.0.0":
- version "7.6.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.6.0.tgz#e9bf1f9b9ba10c77c033082da75f068389041af8"
- integrity sha512-kj4gkZ6qUggkprRq3Uh5KP8XnE1MdIO0J7MhdDX8+rAbB6dJ2UrensGIS+0NPZAaaJ1Vr0PN6oLUgXMU1uMcSg==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a"
+ integrity sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
- "@babel/plugin-syntax-optional-chaining" "^7.2.0"
+ "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.3"
-"@babel/plugin-syntax-class-properties@^7.0.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.2.0.tgz#23b3b7b9bcdabd73672a9149f728cd3be6214812"
- integrity sha512-UxYaGXYQ7rrKJS/PxIKRkv3exi05oH7rokBAsmCSsCxz1sVPZ7Fu6FzKoGgUvmY+0YgSkYHgUoCh5R5bCNBQlw==
+"@babel/plugin-syntax-async-generators@^7.8.4":
+ version "7.8.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"
+ integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-bigint@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea"
+ integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-class-properties@^7.0.0", "@babel/plugin-syntax-class-properties@^7.8.3":
+ version "7.12.13"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10"
+ integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.12.13"
"@babel/plugin-syntax-dynamic-import@^7.0.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612"
- integrity sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3"
+ integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-syntax-export-default-from@^7.0.0", "@babel/plugin-syntax-export-default-from@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.2.0.tgz#edd83b7adc2e0d059e2467ca96c650ab6d2f3820"
- integrity sha512-c7nqUnNST97BWPtoe+Ssi+fJukc9P9/JMZ71IOMNQWza2E+Psrd46N6AEvtw6pqK+gt7ChjXyrw4SPDO79f3Lw==
+"@babel/plugin-syntax-export-default-from@^7.0.0", "@babel/plugin-syntax-export-default-from@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.16.7.tgz#fa89cf13b60de2c3f79acdc2b52a21174c6de060"
+ integrity sha512-4C3E4NsrLOgftKaTYTULhHsuQrGv3FHrBzOMDiS7UYKIpgGBkAdawg4h+EI8zPeK9M0fiIIh72hIwsI24K7MbA==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.16.7"
-"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.2.0.tgz#a765f061f803bc48f240c26f8747faf97c26bf7c"
- integrity sha512-r6YMuZDWLtLlu0kqIim5o/3TNRAlWb073HwT3e2nKf9I8IIvOggPrnILYPsrrKilmn/mYEMCf/Z07w3yQJF6dg==
+"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.16.7", "@babel/plugin-syntax-flow@^7.2.0":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.16.7.tgz#202b147e5892b8452bbb0bb269c7ed2539ab8832"
+ integrity sha512-UDo3YGQO0jH6ytzVwgSLv9i/CzMcUjbKenL67dTrAZPPv6GFAtDhe6jqnvmoKzC/7htNTohhos+onPtDMqJwaQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.16.7"
-"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz#0b85a3b4bc7cdf4cc4b8bf236335b907ca22e7c7"
- integrity sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==
+"@babel/plugin-syntax-import-meta@^7.8.3":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51"
+ integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-syntax-nullish-coalescing-operator@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.2.0.tgz#f75083dfd5ade73e783db729bbd87e7b9efb7624"
- integrity sha512-lRCEaKE+LTxDQtgbYajI04ddt6WW0WJq57xqkAZ+s11h4YgfRHhVA/Y2VhfPzzFD4qeLHWg32DMp9HooY4Kqlg==
+"@babel/plugin-syntax-json-strings@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a"
+ integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e"
- integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==
+"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz#50b6571d13f764266a113d77c82b4a6508bbe665"
+ integrity sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.16.7"
-"@babel/plugin-syntax-optional-catch-binding@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c"
- integrity sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==
+"@babel/plugin-syntax-logical-assignment-operators@^7.8.3":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"
+ integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-syntax-optional-chaining@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.2.0.tgz#a59d6ae8c167e7608eaa443fda9fa8fa6bf21dff"
- integrity sha512-HtGCtvp5Uq/jH/WNUPkK6b7rufnCPLLlDAFN7cmACoIjaOOiXxUt3SswU5loHqrhtqTsa/WoLQ1OQ1AGuZqaWA==
+"@babel/plugin-syntax-nullish-coalescing-operator@^7.0.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9"
+ integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-syntax-typescript@^7.2.0":
- version "7.3.3"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.3.3.tgz#a7cc3f66119a9f7ebe2de5383cce193473d65991"
- integrity sha512-dGwbSMA1YhVS8+31CnPR7LB4pcbrzcV99wQzby4uAfrkZPYZlQ7ImwdpzLqi6Z6IL02b8IAL379CaMwo0x5Lag==
+"@babel/plugin-syntax-numeric-separator@^7.8.3":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97"
+ integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871"
+ integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-catch-binding@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1"
+ integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-chaining@^7.0.0", "@babel/plugin-syntax-optional-chaining@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a"
+ integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-typescript@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz#39c9b55ee153151990fb038651d58d3fd03f98f8"
+ integrity sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.16.7"
"@babel/plugin-transform-arrow-functions@^7.0.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550"
- integrity sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz#44125e653d94b98db76369de9c396dc14bef4154"
+ integrity sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
-
-"@babel/plugin-transform-async-to-generator@^7.0.0":
- version "7.5.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz#89a3848a0166623b5bc481164b5936ab947e887e"
- integrity sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg==
- dependencies:
- "@babel/helper-module-imports" "^7.0.0"
- "@babel/helper-plugin-utils" "^7.0.0"
- "@babel/helper-remap-async-to-generator" "^7.1.0"
+ "@babel/helper-plugin-utils" "^7.16.7"
"@babel/plugin-transform-block-scoped-functions@^7.0.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190"
- integrity sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620"
+ integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.16.7"
"@babel/plugin-transform-block-scoping@^7.0.0":
- version "7.6.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.0.tgz#c49e21228c4bbd4068a35667e6d951c75439b1dc"
- integrity sha512-tIt4E23+kw6TgL/edACZwP1OUKrjOTyMrFMLoT5IOFrfMRabCgekjqFd5o6PaAMildBu46oFkekIdMuGkkPEpA==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz#f50664ab99ddeaee5bc681b8f3a6ea9d72ab4f87"
+ integrity sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
- lodash "^4.17.13"
+ "@babel/helper-plugin-utils" "^7.16.7"
"@babel/plugin-transform-classes@^7.0.0":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz#d094299d9bd680a14a2a0edae38305ad60fb4de9"
- integrity sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz#8f4b9562850cd973de3b498f1218796eb181ce00"
+ integrity sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==
dependencies:
- "@babel/helper-annotate-as-pure" "^7.0.0"
- "@babel/helper-define-map" "^7.5.5"
- "@babel/helper-function-name" "^7.1.0"
- "@babel/helper-optimise-call-expression" "^7.0.0"
- "@babel/helper-plugin-utils" "^7.0.0"
- "@babel/helper-replace-supers" "^7.5.5"
- "@babel/helper-split-export-declaration" "^7.4.4"
+ "@babel/helper-annotate-as-pure" "^7.16.7"
+ "@babel/helper-environment-visitor" "^7.16.7"
+ "@babel/helper-function-name" "^7.16.7"
+ "@babel/helper-optimise-call-expression" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-replace-supers" "^7.16.7"
+ "@babel/helper-split-export-declaration" "^7.16.7"
globals "^11.1.0"
"@babel/plugin-transform-computed-properties@^7.0.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da"
- integrity sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz#66dee12e46f61d2aae7a73710f591eb3df616470"
+ integrity sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.16.7"
"@babel/plugin-transform-destructuring@^7.0.0":
- version "7.6.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz#44bbe08b57f4480094d57d9ffbcd96d309075ba6"
- integrity sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.7.tgz#ca9588ae2d63978a4c29d3f33282d8603f618e23"
+ integrity sha512-VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.16.7"
"@babel/plugin-transform-exponentiation-operator@^7.0.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008"
- integrity sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b"
+ integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==
dependencies:
- "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0"
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.16.7"
"@babel/plugin-transform-flow-strip-types@^7.0.0":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.4.4.tgz#d267a081f49a8705fc9146de0768c6b58dccd8f7"
- integrity sha512-WyVedfeEIILYEaWGAUWzVNyqG4sfsNooMhXWsu/YzOvVGcsnPb5PguysjJqI3t3qiaYj0BR8T2f5njdjTGe44Q==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.16.7.tgz#291fb140c78dabbf87f2427e7c7c332b126964b8"
+ integrity sha512-mzmCq3cNsDpZZu9FADYYyfZJIOrSONmHcop2XEKPdBNMa4PDC4eEvcOvzZaCNcjKu72v0XQlA5y1g58aLRXdYg==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
- "@babel/plugin-syntax-flow" "^7.2.0"
+ "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/plugin-syntax-flow" "^7.16.7"
"@babel/plugin-transform-for-of@^7.0.0":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz#0267fc735e24c808ba173866c6c4d1440fc3c556"
- integrity sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz#649d639d4617dff502a9a158c479b3b556728d8c"
+ integrity sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.16.7"
"@babel/plugin-transform-function-name@^7.0.0":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz#e1436116abb0610c2259094848754ac5230922ad"
- integrity sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf"
+ integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==
dependencies:
- "@babel/helper-function-name" "^7.1.0"
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-compilation-targets" "^7.16.7"
+ "@babel/helper-function-name" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.16.7"
"@babel/plugin-transform-literals@^7.0.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1"
- integrity sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz#254c9618c5ff749e87cb0c0cef1a0a050c0bdab1"
+ integrity sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.16.7"
"@babel/plugin-transform-member-expression-literals@^7.0.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz#fa10aa5c58a2cb6afcf2c9ffa8cb4d8b3d489a2d"
- integrity sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384"
+ integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.16.7"
"@babel/plugin-transform-modules-commonjs@^7.0.0":
- version "7.6.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.6.0.tgz#39dfe957de4420445f1fcf88b68a2e4aa4515486"
- integrity sha512-Ma93Ix95PNSEngqomy5LSBMAQvYKVe3dy+JlVJSHEXZR5ASL9lQBedMiCyVtmTLraIDVRE3ZjTZvmXXD2Ozw3g==
+ version "7.16.8"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz#cdee19aae887b16b9d331009aa9a219af7c86afe"
+ integrity sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==
dependencies:
- "@babel/helper-module-transforms" "^7.4.4"
- "@babel/helper-plugin-utils" "^7.0.0"
- "@babel/helper-simple-access" "^7.1.0"
- babel-plugin-dynamic-import-node "^2.3.0"
+ "@babel/helper-module-transforms" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-simple-access" "^7.16.7"
+ babel-plugin-dynamic-import-node "^2.3.3"
"@babel/plugin-transform-object-assign@^7.0.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.2.0.tgz#6fdeea42be17040f119e38e23ea0f49f31968bde"
- integrity sha512-nmE55cZBPFgUktbF2OuoZgPRadfxosLOpSgzEPYotKSls9J4pEPcembi8r78RU37Rph6UApCpNmsQA4QMWK9Ng==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.16.7.tgz#5fe08d63dccfeb6a33aa2638faf98e5c584100f8"
+ integrity sha512-R8mawvm3x0COTJtveuoqZIjNypn2FjfvXZr4pSQ8VhEFBuQGBz4XhHasZtHXjgXU4XptZ4HtGof3NoYc93ZH9Q==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.16.7"
"@babel/plugin-transform-object-super@^7.0.0":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz#c70021df834073c65eb613b8679cc4a381d1a9f9"
- integrity sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94"
+ integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
- "@babel/helper-replace-supers" "^7.5.5"
+ "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-replace-supers" "^7.16.7"
-"@babel/plugin-transform-parameters@^7.0.0":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz#7556cf03f318bd2719fe4c922d2d808be5571e16"
- integrity sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==
+"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz#a1721f55b99b736511cb7e0152f61f17688f331f"
+ integrity sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==
dependencies:
- "@babel/helper-call-delegate" "^7.4.4"
- "@babel/helper-get-function-arity" "^7.0.0"
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.16.7"
"@babel/plugin-transform-property-literals@^7.0.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz#03e33f653f5b25c4eb572c98b9485055b389e905"
- integrity sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55"
+ integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.16.7"
"@babel/plugin-transform-react-display-name@^7.0.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz#ebfaed87834ce8dc4279609a4f0c324c156e3eb0"
- integrity sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz#7b6d40d232f4c0f550ea348593db3b21e2404340"
+ integrity sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-react-jsx-self@^7.0.0":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.16.7.tgz#f432ad0cba14c4a1faf44f0076c69e42a4d4479e"
+ integrity sha512-oe5VuWs7J9ilH3BCCApGoYjHoSO48vkjX2CbA5bFVhIuO2HKxA3vyF7rleA4o6/4rTDbk6r8hBW7Ul8E+UZrpA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.16.7"
"@babel/plugin-transform-react-jsx-source@^7.0.0":
- version "7.5.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.5.0.tgz#583b10c49cf057e237085bcbd8cc960bd83bd96b"
- integrity sha512-58Q+Jsy4IDCZx7kqEZuSDdam/1oW8OdDX8f+Loo6xyxdfg1yF0GE2XNJQSTZCaMol93+FBzpWiPEwtbMloAcPg==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.16.7.tgz#1879c3f23629d287cc6186a6c683154509ec70c0"
+ integrity sha512-rONFiQz9vgbsnaMtQlZCjIRwhJvlrPET8TabIUK2hzlXw9B9s2Ieaxte1SCOOXMbWRHodbKixNf3BLcWVOQ8Bw==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
- "@babel/plugin-syntax-jsx" "^7.2.0"
+ "@babel/helper-plugin-utils" "^7.16.7"
"@babel/plugin-transform-react-jsx@^7.0.0":
- version "7.3.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz#f2cab99026631c767e2745a5368b331cfe8f5290"
- integrity sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.7.tgz#86a6a220552afd0e4e1f0388a68a372be7add0d4"
+ integrity sha512-8D16ye66fxiE8m890w0BpPpngG9o9OVBBy0gH2E+2AR7qMR2ZpTYJEqLxAsoroenMId0p/wMW+Blc0meDgu0Ag==
dependencies:
- "@babel/helper-builder-react-jsx" "^7.3.0"
- "@babel/helper-plugin-utils" "^7.0.0"
- "@babel/plugin-syntax-jsx" "^7.2.0"
+ "@babel/helper-annotate-as-pure" "^7.16.7"
+ "@babel/helper-module-imports" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/plugin-syntax-jsx" "^7.16.7"
+ "@babel/types" "^7.16.7"
"@babel/plugin-transform-regenerator@^7.0.0":
- version "7.4.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz#629dc82512c55cee01341fb27bdfcb210354680f"
- integrity sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz#9e7576dc476cb89ccc5096fff7af659243b4adeb"
+ integrity sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==
dependencies:
- regenerator-transform "^0.14.0"
+ regenerator-transform "^0.14.2"
"@babel/plugin-transform-runtime@^7.0.0":
- version "7.6.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.6.0.tgz#85a3cce402b28586138e368fce20ab3019b9713e"
- integrity sha512-Da8tMf7uClzwUm/pnJ1S93m/aRXmoYNDD7TkHua8xBDdaAs54uZpTWvEt6NGwmoVMb9mZbntfTqmG2oSzN/7Vg==
+ version "7.16.10"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.10.tgz#53d9fd3496daedce1dd99639097fa5d14f4c7c2c"
+ integrity sha512-9nwTiqETv2G7xI4RvXHNfpGdr8pAA+Q/YtN3yLK7OoK7n9OibVm/xymJ838a9A6E/IciOLPj82lZk0fW6O4O7w==
dependencies:
- "@babel/helper-module-imports" "^7.0.0"
- "@babel/helper-plugin-utils" "^7.0.0"
- resolve "^1.8.1"
- semver "^5.5.1"
+ "@babel/helper-module-imports" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.16.7"
+ babel-plugin-polyfill-corejs2 "^0.3.0"
+ babel-plugin-polyfill-corejs3 "^0.5.0"
+ babel-plugin-polyfill-regenerator "^0.3.0"
+ semver "^6.3.0"
"@babel/plugin-transform-shorthand-properties@^7.0.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0"
- integrity sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a"
+ integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.16.7"
"@babel/plugin-transform-spread@^7.0.0":
- version "7.2.2"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz#3103a9abe22f742b6d406ecd3cd49b774919b406"
- integrity sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz#a303e2122f9f12e0105daeedd0f30fb197d8ff44"
+ integrity sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0"
"@babel/plugin-transform-sticky-regex@^7.0.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1"
- integrity sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660"
+ integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
- "@babel/helper-regex" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.16.7"
"@babel/plugin-transform-template-literals@^7.0.0":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz#9d28fea7bbce637fb7612a0750989d8321d4bcb0"
- integrity sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz#f3d1c45d28967c8e80f53666fc9c3e50618217ab"
+ integrity sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==
dependencies:
- "@babel/helper-annotate-as-pure" "^7.0.0"
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.16.7"
-"@babel/plugin-transform-typescript@^7.0.0":
- version "7.6.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.6.0.tgz#48d78405f1aa856ebeea7288a48a19ed8da377a6"
- integrity sha512-yzw7EopOOr6saONZ3KA3lpizKnWRTe+rfBqg4AmQbSow7ik7fqmzrfIqt053osLwLE2AaTqGinLM2tl6+M/uog==
+"@babel/plugin-transform-typescript@^7.5.0":
+ version "7.16.8"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz#591ce9b6b83504903fa9dd3652c357c2ba7a1ee0"
+ integrity sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==
dependencies:
- "@babel/helper-create-class-features-plugin" "^7.6.0"
- "@babel/helper-plugin-utils" "^7.0.0"
- "@babel/plugin-syntax-typescript" "^7.2.0"
+ "@babel/helper-create-class-features-plugin" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.16.7"
+ "@babel/plugin-syntax-typescript" "^7.16.7"
"@babel/plugin-transform-unicode-regex@^7.0.0":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz#ab4634bb4f14d36728bf5978322b35587787970f"
- integrity sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2"
+ integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==
dependencies:
- "@babel/helper-plugin-utils" "^7.0.0"
- "@babel/helper-regex" "^7.4.4"
- regexpu-core "^4.5.4"
+ "@babel/helper-create-regexp-features-plugin" "^7.16.7"
+ "@babel/helper-plugin-utils" "^7.16.7"
"@babel/register@^7.0.0":
- version "7.6.0"
- resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.6.0.tgz#76b6f466714680f4becafd45beeb2a7b87431abf"
- integrity sha512-78BomdN8el+x/nkup9KwtjJXuptW5oXMFmP11WoM2VJBjxrKv4grC3qjpLL8RGGUYUGsm57xnjYFM2uom+jWUQ==
+ version "7.16.9"
+ resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.16.9.tgz#fcfb23cfdd9ad95c9771e58183de83b513857806"
+ integrity sha512-jJ72wcghdRIlENfvALcyODhNoGE5j75cYHdC+aQMh6cU/P86tiiXTp9XYZct1UxUMo/4+BgQRyNZEGx0KWGS+g==
dependencies:
+ clone-deep "^4.0.1"
find-cache-dir "^2.0.0"
- lodash "^4.17.13"
- mkdirp "^0.5.1"
+ make-dir "^2.1.0"
pirates "^4.0.0"
- source-map-support "^0.5.9"
+ source-map-support "^0.5.16"
-"@babel/runtime@^7.0.0", "@babel/runtime@^7.6.0":
- version "7.6.0"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.6.0.tgz#4fc1d642a9fd0299754e8b5de62c631cf5568205"
- integrity sha512-89eSBLJsxNxOERC0Op4vd+0Bqm6wRMqMbFtV3i0/fbaWw/mJ8Q3eBvgX0G4SyrOOLCtbu98HspF8o09MRT+KzQ==
+"@babel/runtime-corejs3@^7.12.1":
+ version "7.16.8"
+ resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.16.8.tgz#ea533d96eda6fdc76b1812248e9fbd0c11d4a1a7"
+ integrity sha512-3fKhuICS1lMz0plI5ktOE/yEtBRMVxplzRkdn6mJQ197XiY0JnrzYV0+Mxozq3JZ8SBV9Ecurmw1XsGbwOf+Sg==
dependencies:
- regenerator-runtime "^0.13.2"
+ core-js-pure "^3.20.2"
+ regenerator-runtime "^0.13.4"
-"@babel/template@^7.0.0", "@babel/template@^7.1.0", "@babel/template@^7.4.0", "@babel/template@^7.4.4", "@babel/template@^7.6.0":
- version "7.6.0"
- resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.6.0.tgz#7f0159c7f5012230dad64cca42ec9bdb5c9536e6"
- integrity sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ==
+"@babel/runtime@^7.0.0", "@babel/runtime@^7.8.4":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.7.tgz#03ff99f64106588c9c403c6ecb8c3bafbbdff1fa"
+ integrity sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==
dependencies:
- "@babel/code-frame" "^7.0.0"
- "@babel/parser" "^7.6.0"
- "@babel/types" "^7.6.0"
+ regenerator-runtime "^0.13.4"
-"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5", "@babel/traverse@^7.6.0":
- version "7.6.0"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.0.tgz#389391d510f79be7ce2ddd6717be66d3fed4b516"
- integrity sha512-93t52SaOBgml/xY74lsmt7xOR4ufYvhb5c5qiM6lu4J/dWGMAfAh6eKw4PjLes6DI6nQgearoxnFJk60YchpvQ==
+"@babel/template@^7.0.0", "@babel/template@^7.16.7", "@babel/template@^7.3.3":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155"
+ integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==
dependencies:
- "@babel/code-frame" "^7.5.5"
- "@babel/generator" "^7.6.0"
- "@babel/helper-function-name" "^7.1.0"
- "@babel/helper-split-export-declaration" "^7.4.4"
- "@babel/parser" "^7.6.0"
- "@babel/types" "^7.6.0"
+ "@babel/code-frame" "^7.16.7"
+ "@babel/parser" "^7.16.7"
+ "@babel/types" "^7.16.7"
+
+"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.10", "@babel/traverse@^7.16.7", "@babel/traverse@^7.7.0":
+ version "7.16.10"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.10.tgz#448f940defbe95b5a8029975b051f75993e8239f"
+ integrity sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw==
+ dependencies:
+ "@babel/code-frame" "^7.16.7"
+ "@babel/generator" "^7.16.8"
+ "@babel/helper-environment-visitor" "^7.16.7"
+ "@babel/helper-function-name" "^7.16.7"
+ "@babel/helper-hoist-variables" "^7.16.7"
+ "@babel/helper-split-export-declaration" "^7.16.7"
+ "@babel/parser" "^7.16.10"
+ "@babel/types" "^7.16.8"
debug "^4.1.0"
globals "^11.1.0"
- lodash "^4.17.13"
-"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5", "@babel/types@^7.6.0":
- version "7.6.1"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.1.tgz#53abf3308add3ac2a2884d539151c57c4b3ac648"
- integrity sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g==
+"@babel/types@^7.0.0", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.7.0":
+ version "7.16.8"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.8.tgz#0ba5da91dd71e0a4e7781a30f22770831062e3c1"
+ integrity sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==
dependencies:
- esutils "^2.0.2"
- lodash "^4.17.13"
+ "@babel/helper-validator-identifier" "^7.16.7"
to-fast-properties "^2.0.0"
+"@bcoe/v8-coverage@^0.2.3":
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
+ integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
+
"@cnakazawa/watch@^1.0.3":
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef"
- integrity sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a"
+ integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==
dependencies:
exec-sh "^0.3.2"
minimist "^1.2.0"
"@hapi/address@2.x.x":
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.1.tgz#61395b5ed94c4cb19c2dc4c85969cff3d40d583f"
- integrity sha512-DYuHzu978pP1XW1GD3HGvLnAFjbQTIgc2+V153FGkbS2pgo9haigCdwBnUDrbhaOkgiJlbZvoEqDrcxSLHpiWA==
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5"
+ integrity sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==
"@hapi/bourne@1.x.x":
version "1.3.2"
resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a"
integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==
-"@hapi/hoek@8.x.x":
- version "8.2.4"
- resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.2.4.tgz#684a14f4ca35d46f44abc87dfc696e5e4fe8a020"
- integrity sha512-Ze5SDNt325yZvNO7s5C4fXDscjJ6dcqLFXJQ/M7dZRQCewuDj2iDUuBi6jLQt+APbW9RjjVEvLr35FXuOEqjow==
+"@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0":
+ version "8.5.1"
+ resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06"
+ integrity sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==
"@hapi/joi@^15.0.3":
version "15.1.1"
@@ -682,13 +746,29 @@
"@hapi/topo" "3.x.x"
"@hapi/topo@3.x.x":
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.3.tgz#c7a02e0d936596d29f184e6d7fdc07e8b5efce11"
- integrity sha512-JmS9/vQK6dcUYn7wc2YZTqzIKubAQcJKu2KCKAru6es482U5RT5fP1EXCPtlXpiK7PR0On/kpQKI4fRKkzpZBQ==
+ version "3.1.6"
+ resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29"
+ integrity sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==
dependencies:
- "@hapi/hoek" "8.x.x"
+ "@hapi/hoek" "^8.3.0"
-"@jest/console@^24.7.1", "@jest/console@^24.9.0":
+"@istanbuljs/load-nyc-config@^1.0.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced"
+ integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==
+ dependencies:
+ camelcase "^5.3.1"
+ find-up "^4.1.0"
+ get-package-type "^0.1.0"
+ js-yaml "^3.13.1"
+ resolve-from "^5.0.0"
+
+"@istanbuljs/schema@^0.1.2":
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98"
+ integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==
+
+"@jest/console@^24.9.0":
version "24.9.0"
resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0"
integrity sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==
@@ -697,49 +777,59 @@
chalk "^2.0.1"
slash "^2.0.0"
-"@jest/core@^24.9.0":
- version "24.9.0"
- resolved "https://registry.yarnpkg.com/@jest/core/-/core-24.9.0.tgz#2ceccd0b93181f9c4850e74f2a9ad43d351369c4"
- integrity sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==
+"@jest/console@^25.5.0":
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/@jest/console/-/console-25.5.0.tgz#770800799d510f37329c508a9edd0b7b447d9abb"
+ integrity sha512-T48kZa6MK1Y6k4b89sexwmSF4YLeZS/Udqg3Jj3jG/cHH+N/sLFCEoXEDMOKugJQ9FxPN1osxIknvKkxt6MKyw==
dependencies:
- "@jest/console" "^24.7.1"
- "@jest/reporters" "^24.9.0"
- "@jest/test-result" "^24.9.0"
- "@jest/transform" "^24.9.0"
- "@jest/types" "^24.9.0"
- ansi-escapes "^3.0.0"
- chalk "^2.0.1"
- exit "^0.1.2"
- graceful-fs "^4.1.15"
- jest-changed-files "^24.9.0"
- jest-config "^24.9.0"
- jest-haste-map "^24.9.0"
- jest-message-util "^24.9.0"
- jest-regex-util "^24.3.0"
- jest-resolve "^24.9.0"
- jest-resolve-dependencies "^24.9.0"
- jest-runner "^24.9.0"
- jest-runtime "^24.9.0"
- jest-snapshot "^24.9.0"
- jest-util "^24.9.0"
- jest-validate "^24.9.0"
- jest-watcher "^24.9.0"
- micromatch "^3.1.10"
- p-each-series "^1.0.0"
- realpath-native "^1.1.0"
- rimraf "^2.5.4"
- slash "^2.0.0"
- strip-ansi "^5.0.0"
+ "@jest/types" "^25.5.0"
+ chalk "^3.0.0"
+ jest-message-util "^25.5.0"
+ jest-util "^25.5.0"
+ slash "^3.0.0"
-"@jest/environment@^24.9.0":
- version "24.9.0"
- resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-24.9.0.tgz#21e3afa2d65c0586cbd6cbefe208bafade44ab18"
- integrity sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==
+"@jest/core@^25.5.4":
+ version "25.5.4"
+ resolved "https://registry.yarnpkg.com/@jest/core/-/core-25.5.4.tgz#3ef7412f7339210f003cdf36646bbca786efe7b4"
+ integrity sha512-3uSo7laYxF00Dg/DMgbn4xMJKmDdWvZnf89n8Xj/5/AeQ2dOQmn6b6Hkj/MleyzZWXpwv+WSdYWl4cLsy2JsoA==
dependencies:
- "@jest/fake-timers" "^24.9.0"
- "@jest/transform" "^24.9.0"
- "@jest/types" "^24.9.0"
- jest-mock "^24.9.0"
+ "@jest/console" "^25.5.0"
+ "@jest/reporters" "^25.5.1"
+ "@jest/test-result" "^25.5.0"
+ "@jest/transform" "^25.5.1"
+ "@jest/types" "^25.5.0"
+ ansi-escapes "^4.2.1"
+ chalk "^3.0.0"
+ exit "^0.1.2"
+ graceful-fs "^4.2.4"
+ jest-changed-files "^25.5.0"
+ jest-config "^25.5.4"
+ jest-haste-map "^25.5.1"
+ jest-message-util "^25.5.0"
+ jest-regex-util "^25.2.6"
+ jest-resolve "^25.5.1"
+ jest-resolve-dependencies "^25.5.4"
+ jest-runner "^25.5.4"
+ jest-runtime "^25.5.4"
+ jest-snapshot "^25.5.1"
+ jest-util "^25.5.0"
+ jest-validate "^25.5.0"
+ jest-watcher "^25.5.0"
+ micromatch "^4.0.2"
+ p-each-series "^2.1.0"
+ realpath-native "^2.0.0"
+ rimraf "^3.0.0"
+ slash "^3.0.0"
+ strip-ansi "^6.0.0"
+
+"@jest/environment@^25.5.0":
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-25.5.0.tgz#aa33b0c21a716c65686638e7ef816c0e3a0c7b37"
+ integrity sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA==
+ dependencies:
+ "@jest/fake-timers" "^25.5.0"
+ "@jest/types" "^25.5.0"
+ jest-mock "^25.5.0"
"@jest/fake-timers@^24.9.0":
version "24.9.0"
@@ -750,34 +840,59 @@
jest-message-util "^24.9.0"
jest-mock "^24.9.0"
-"@jest/reporters@^24.9.0":
- version "24.9.0"
- resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-24.9.0.tgz#86660eff8e2b9661d042a8e98a028b8d631a5b43"
- integrity sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==
+"@jest/fake-timers@^25.5.0":
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-25.5.0.tgz#46352e00533c024c90c2bc2ad9f2959f7f114185"
+ integrity sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ==
dependencies:
- "@jest/environment" "^24.9.0"
- "@jest/test-result" "^24.9.0"
- "@jest/transform" "^24.9.0"
- "@jest/types" "^24.9.0"
- chalk "^2.0.1"
+ "@jest/types" "^25.5.0"
+ jest-message-util "^25.5.0"
+ jest-mock "^25.5.0"
+ jest-util "^25.5.0"
+ lolex "^5.0.0"
+
+"@jest/globals@^25.5.2":
+ version "25.5.2"
+ resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-25.5.2.tgz#5e45e9de8d228716af3257eeb3991cc2e162ca88"
+ integrity sha512-AgAS/Ny7Q2RCIj5kZ+0MuKM1wbF0WMLxbCVl/GOMoCNbODRdJ541IxJ98xnZdVSZXivKpJlNPIWa3QmY0l4CXA==
+ dependencies:
+ "@jest/environment" "^25.5.0"
+ "@jest/types" "^25.5.0"
+ expect "^25.5.0"
+
+"@jest/reporters@^25.5.1":
+ version "25.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-25.5.1.tgz#cb686bcc680f664c2dbaf7ed873e93aa6811538b"
+ integrity sha512-3jbd8pPDTuhYJ7vqiHXbSwTJQNavczPs+f1kRprRDxETeE3u6srJ+f0NPuwvOmk+lmunZzPkYWIFZDLHQPkviw==
+ dependencies:
+ "@bcoe/v8-coverage" "^0.2.3"
+ "@jest/console" "^25.5.0"
+ "@jest/test-result" "^25.5.0"
+ "@jest/transform" "^25.5.1"
+ "@jest/types" "^25.5.0"
+ chalk "^3.0.0"
+ collect-v8-coverage "^1.0.0"
exit "^0.1.2"
glob "^7.1.2"
- istanbul-lib-coverage "^2.0.2"
- istanbul-lib-instrument "^3.0.1"
- istanbul-lib-report "^2.0.4"
- istanbul-lib-source-maps "^3.0.1"
- istanbul-reports "^2.2.6"
- jest-haste-map "^24.9.0"
- jest-resolve "^24.9.0"
- jest-runtime "^24.9.0"
- jest-util "^24.9.0"
- jest-worker "^24.6.0"
- node-notifier "^5.4.2"
- slash "^2.0.0"
+ graceful-fs "^4.2.4"
+ istanbul-lib-coverage "^3.0.0"
+ istanbul-lib-instrument "^4.0.0"
+ istanbul-lib-report "^3.0.0"
+ istanbul-lib-source-maps "^4.0.0"
+ istanbul-reports "^3.0.2"
+ jest-haste-map "^25.5.1"
+ jest-resolve "^25.5.1"
+ jest-util "^25.5.0"
+ jest-worker "^25.5.0"
+ slash "^3.0.0"
source-map "^0.6.0"
- string-length "^2.0.0"
+ string-length "^3.1.0"
+ terminal-link "^2.0.0"
+ v8-to-istanbul "^4.1.3"
+ optionalDependencies:
+ node-notifier "^6.0.0"
-"@jest/source-map@^24.3.0", "@jest/source-map@^24.9.0":
+"@jest/source-map@^24.9.0":
version "24.9.0"
resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714"
integrity sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==
@@ -786,6 +901,15 @@
graceful-fs "^4.1.15"
source-map "^0.6.0"
+"@jest/source-map@^25.5.0":
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-25.5.0.tgz#df5c20d6050aa292c2c6d3f0d2c7606af315bd1b"
+ integrity sha512-eIGx0xN12yVpMcPaVpjXPnn3N30QGJCJQSkEDUt9x1fI1Gdvb07Ml6K5iN2hG7NmMP6FDmtPEssE3z6doOYUwQ==
+ dependencies:
+ callsites "^3.0.0"
+ graceful-fs "^4.2.4"
+ source-map "^0.6.0"
+
"@jest/test-result@^24.9.0":
version "24.9.0"
resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.9.0.tgz#11796e8aa9dbf88ea025757b3152595ad06ba0ca"
@@ -795,37 +919,48 @@
"@jest/types" "^24.9.0"
"@types/istanbul-lib-coverage" "^2.0.0"
-"@jest/test-sequencer@^24.9.0":
- version "24.9.0"
- resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz#f8f334f35b625a4f2f355f2fe7e6036dad2e6b31"
- integrity sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==
+"@jest/test-result@^25.5.0":
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-25.5.0.tgz#139a043230cdeffe9ba2d8341b27f2efc77ce87c"
+ integrity sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A==
dependencies:
- "@jest/test-result" "^24.9.0"
- jest-haste-map "^24.9.0"
- jest-runner "^24.9.0"
- jest-runtime "^24.9.0"
+ "@jest/console" "^25.5.0"
+ "@jest/types" "^25.5.0"
+ "@types/istanbul-lib-coverage" "^2.0.0"
+ collect-v8-coverage "^1.0.0"
-"@jest/transform@^24.9.0":
- version "24.9.0"
- resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.9.0.tgz#4ae2768b296553fadab09e9ec119543c90b16c56"
- integrity sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==
+"@jest/test-sequencer@^25.5.4":
+ version "25.5.4"
+ resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-25.5.4.tgz#9b4e685b36954c38d0f052e596d28161bdc8b737"
+ integrity sha512-pTJGEkSeg1EkCO2YWq6hbFvKNXk8ejqlxiOg1jBNLnWrgXOkdY6UmqZpwGFXNnRt9B8nO1uWMzLLZ4eCmhkPNA==
+ dependencies:
+ "@jest/test-result" "^25.5.0"
+ graceful-fs "^4.2.4"
+ jest-haste-map "^25.5.1"
+ jest-runner "^25.5.4"
+ jest-runtime "^25.5.4"
+
+"@jest/transform@^25.5.1":
+ version "25.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-25.5.1.tgz#0469ddc17699dd2bf985db55fa0fb9309f5c2db3"
+ integrity sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg==
dependencies:
"@babel/core" "^7.1.0"
- "@jest/types" "^24.9.0"
- babel-plugin-istanbul "^5.1.0"
- chalk "^2.0.1"
+ "@jest/types" "^25.5.0"
+ babel-plugin-istanbul "^6.0.0"
+ chalk "^3.0.0"
convert-source-map "^1.4.0"
fast-json-stable-stringify "^2.0.0"
- graceful-fs "^4.1.15"
- jest-haste-map "^24.9.0"
- jest-regex-util "^24.9.0"
- jest-util "^24.9.0"
- micromatch "^3.1.10"
+ graceful-fs "^4.2.4"
+ jest-haste-map "^25.5.1"
+ jest-regex-util "^25.2.6"
+ jest-util "^25.5.0"
+ micromatch "^4.0.2"
pirates "^4.0.1"
- realpath-native "^1.1.0"
- slash "^2.0.0"
+ realpath-native "^2.0.0"
+ slash "^3.0.0"
source-map "^0.6.1"
- write-file-atomic "2.4.1"
+ write-file-atomic "^3.0.0"
"@jest/types@^24.9.0":
version "24.9.0"
@@ -836,98 +971,211 @@
"@types/istanbul-reports" "^1.1.1"
"@types/yargs" "^13.0.0"
-"@react-native-community/cli-platform-android@^2.6.0", "@react-native-community/cli-platform-android@^2.9.0":
- version "2.9.0"
- resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-2.9.0.tgz#28831e61ce565a2c7d1905852fce1eecfd33cb5e"
- integrity sha512-VEQs4Q6R5tnlYFrQIFoPEWjLc43whRHC9HeH+idbFymwDqysLVUffQbb9D6PJUj+C/AvrDhBhU6S3tDjGbSsag==
+"@jest/types@^25.5.0":
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d"
+ integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==
dependencies:
- "@react-native-community/cli-tools" "^2.8.3"
- chalk "^2.4.2"
+ "@types/istanbul-lib-coverage" "^2.0.0"
+ "@types/istanbul-reports" "^1.1.1"
+ "@types/yargs" "^15.0.0"
+ chalk "^3.0.0"
+
+"@react-native-community/cli-debugger-ui@^4.13.1":
+ version "4.13.1"
+ resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-4.13.1.tgz#07de6d4dab80ec49231de1f1fbf658b4ad39b32c"
+ integrity sha512-UFnkg5RTq3s2X15fSkrWY9+5BKOFjihNSnJjTV2H5PtTUFbd55qnxxPw8CxSfK0bXb1IrSvCESprk2LEpqr5cg==
+ dependencies:
+ serve-static "^1.13.1"
+
+"@react-native-community/cli-hermes@^4.13.0":
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/@react-native-community/cli-hermes/-/cli-hermes-4.13.0.tgz#6243ed9c709dad5e523f1ccd7d21066b32f2899d"
+ integrity sha512-oG+w0Uby6rSGsUkJGLvMQctZ5eVRLLfhf84lLyz942OEDxFRa9U19YJxOe9FmgCKtotbYiM3P/XhK+SVCuerPQ==
+ dependencies:
+ "@react-native-community/cli-platform-android" "^4.13.0"
+ "@react-native-community/cli-tools" "^4.13.0"
+ chalk "^3.0.0"
+ hermes-profile-transformer "^0.0.6"
+ ip "^1.1.5"
+
+"@react-native-community/cli-platform-android@^4.10.0", "@react-native-community/cli-platform-android@^4.13.0":
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-4.13.0.tgz#922681ec82ee1aadd993598b814df1152118be02"
+ integrity sha512-3i8sX8GklEytUZwPnojuoFbCjIRzMugCdzDIdZ9UNmi/OhD4/8mLGO0dgXfT4sMWjZwu3qjy45sFfk2zOAgHbA==
+ dependencies:
+ "@react-native-community/cli-tools" "^4.13.0"
+ chalk "^3.0.0"
execa "^1.0.0"
+ fs-extra "^8.1.0"
+ glob "^7.1.3"
jetifier "^1.6.2"
- logkitty "^0.6.0"
+ lodash "^4.17.15"
+ logkitty "^0.7.1"
slash "^3.0.0"
xmldoc "^1.1.2"
-"@react-native-community/cli-platform-ios@^2.4.1", "@react-native-community/cli-platform-ios@^2.9.0":
- version "2.9.0"
- resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-2.9.0.tgz#21adb8ee813d6ca6fd9d4d9be63f92024f7e2fe7"
- integrity sha512-vg6EOamtFaaQ02FiWu+jzJTfeTJ0OVjJSAoR2rhJKNye6RgJLoQlfp0Hg3waF6XrO72a7afYZsPdKSlN3ewlHg==
+"@react-native-community/cli-platform-ios@^4.10.0":
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-4.13.0.tgz#a738915c68cac86df54e578b59a1311ea62b1aef"
+ integrity sha512-6THlTu8zp62efkzimfGr3VIuQJ2514o+vScZERJCV1xgEi8XtV7mb/ZKt9o6Y9WGxKKkc0E0b/aVAtgy+L27CA==
dependencies:
- "@react-native-community/cli-tools" "^2.8.3"
- chalk "^2.4.2"
+ "@react-native-community/cli-tools" "^4.13.0"
+ chalk "^3.0.0"
+ glob "^7.1.3"
+ js-yaml "^3.13.1"
+ lodash "^4.17.15"
+ plist "^3.0.1"
xcode "^2.0.0"
-"@react-native-community/cli-tools@^2.8.3":
- version "2.8.3"
- resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-2.8.3.tgz#0e2249f48cf4603fb8d740a9f0715c31ac131ceb"
- integrity sha512-N5Pz+pR+GFq3JApjd0SW4jp9KC7kbKsMH65QLRh30JNsxdPvNkYox6/ZZdkvdXaI5ev3EckR7eqlcwi5gpVTYQ==
+"@react-native-community/cli-server-api@^4.13.1":
+ version "4.13.1"
+ resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-4.13.1.tgz#bee7ee9702afce848e9d6ca3dcd5669b99b125bd"
+ integrity sha512-vQzsFKD9CjHthA2ehTQX8c7uIzlI9A7ejaIow1I9RlEnLraPH2QqVDmzIdbdh5Od47UPbRzamCgAP8Bnqv3qwQ==
dependencies:
- chalk "^2.4.2"
- lodash "^4.17.5"
- mime "^2.4.1"
- node-fetch "^2.5.0"
-
-"@react-native-community/cli@^2.6.0":
- version "2.9.0"
- resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-2.9.0.tgz#f0d18dc3e5a8f68e3d6ad353c444dc2f08d3fbdc"
- integrity sha512-6TYkrR1pwIEPpiPZnOYscCGr5Xh8RijqBPVAOGTaEdpQQpc/J7GDPrePwbyTzwmCPtiK6XT+T5+1AiAK5bz/sw==
- dependencies:
- "@hapi/joi" "^15.0.3"
- "@react-native-community/cli-platform-android" "^2.9.0"
- "@react-native-community/cli-platform-ios" "^2.9.0"
- "@react-native-community/cli-tools" "^2.8.3"
- chalk "^2.4.2"
- commander "^2.19.0"
+ "@react-native-community/cli-debugger-ui" "^4.13.1"
+ "@react-native-community/cli-tools" "^4.13.0"
compression "^1.7.1"
connect "^3.6.5"
- cosmiconfig "^5.1.0"
- deepmerge "^3.2.0"
- envinfo "^7.1.0"
errorhandler "^1.5.0"
- execa "^1.0.0"
- fs-extra "^7.0.1"
- glob "^7.1.1"
- graceful-fs "^4.1.3"
- inquirer "^3.0.6"
- lodash "^4.17.5"
- 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-notifier "^5.2.1"
- open "^6.2.0"
- ora "^3.4.0"
- plist "^3.0.0"
- semver "^5.0.3"
+ nocache "^2.1.0"
+ pretty-format "^25.1.0"
serve-static "^1.13.1"
- shell-quote "1.6.1"
ws "^1.1.0"
-"@react-native-community/eslint-config@^0.0.5":
- version "0.0.5"
- resolved "https://registry.yarnpkg.com/@react-native-community/eslint-config/-/eslint-config-0.0.5.tgz#584f6493258202a57efc22e7be66966e43832795"
- integrity sha512-jwO2tnKaTPTLX5XYXMHGEnFdf543SU7jz98/OF5mDH3b7lP+BOaCD+jVfqqHoDRkcqyPlYiR1CgwVGWpi0vMWg==
+"@react-native-community/cli-tools@^4.13.0":
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-4.13.0.tgz#b406463d33af16cedc4305a9a9257ed32845cf1b"
+ integrity sha512-s4f489h5+EJksn4CfheLgv5PGOM0CDmK1UEBLw2t/ncWs3cW2VI7vXzndcd/WJHTv3GntJhXDcJMuL+Z2IAOgg==
dependencies:
- "@typescript-eslint/eslint-plugin" "^1.5.0"
- "@typescript-eslint/parser" "^1.5.0"
- babel-eslint "10.0.1"
- eslint-plugin-eslint-comments "^3.1.1"
+ chalk "^3.0.0"
+ lodash "^4.17.15"
+ mime "^2.4.1"
+ node-fetch "^2.6.0"
+ open "^6.2.0"
+ shell-quote "1.6.1"
+
+"@react-native-community/cli-types@^4.10.1":
+ version "4.10.1"
+ resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-4.10.1.tgz#d68a2dcd1649d3b3774823c64e5e9ce55bfbe1c9"
+ integrity sha512-ael2f1onoPF3vF7YqHGWy7NnafzGu+yp88BbFbP0ydoCP2xGSUzmZVw0zakPTC040Id+JQ9WeFczujMkDy6jYQ==
+
+"@react-native-community/cli@^4.10.0":
+ version "4.14.0"
+ resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-4.14.0.tgz#bb106a98341bfa2db36060091ff90bfe82ea4f55"
+ integrity sha512-EYJKBuxFxAu/iwNUfwDq41FjORpvSh1wvQ3qsHjzcR5uaGlWEOJrd3uNJDuKBAS0TVvbEesLF9NEXipjyRVr4Q==
+ dependencies:
+ "@hapi/joi" "^15.0.3"
+ "@react-native-community/cli-debugger-ui" "^4.13.1"
+ "@react-native-community/cli-hermes" "^4.13.0"
+ "@react-native-community/cli-server-api" "^4.13.1"
+ "@react-native-community/cli-tools" "^4.13.0"
+ "@react-native-community/cli-types" "^4.10.1"
+ chalk "^3.0.0"
+ command-exists "^1.2.8"
+ commander "^2.19.0"
+ cosmiconfig "^5.1.0"
+ deepmerge "^3.2.0"
+ envinfo "^7.7.2"
+ execa "^1.0.0"
+ find-up "^4.1.0"
+ fs-extra "^8.1.0"
+ glob "^7.1.3"
+ graceful-fs "^4.1.3"
+ inquirer "^3.0.6"
+ leven "^3.1.0"
+ lodash "^4.17.15"
+ metro "^0.59.0"
+ metro-config "^0.59.0"
+ metro-core "^0.59.0"
+ metro-react-native-babel-transformer "^0.59.0"
+ metro-resolver "^0.59.0"
+ minimist "^1.2.0"
+ mkdirp "^0.5.1"
+ node-stream-zip "^1.9.1"
+ ora "^3.4.0"
+ pretty-format "^25.2.0"
+ semver "^6.3.0"
+ serve-static "^1.13.1"
+ strip-ansi "^5.2.0"
+ sudo-prompt "^9.0.0"
+ wcwidth "^1.0.1"
+
+"@react-native-community/eslint-config@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@react-native-community/eslint-config/-/eslint-config-1.1.0.tgz#2dacad06dd44d13e778510864473fc6091f080c0"
+ integrity sha512-hwb1hC28BhkwLwnO6vDISV6XZbipw2RIEhBVBN+pE7AUG9HjFXxoksiiOSoYgox9C8g86VJwHnKpak/3NnVBkQ==
+ dependencies:
+ "@react-native-community/eslint-plugin" "^1.1.0"
+ "@typescript-eslint/eslint-plugin" "^2.25.0"
+ "@typescript-eslint/parser" "^2.25.0"
+ babel-eslint "10.1.0"
+ eslint-config-prettier "^6.10.1"
+ eslint-plugin-eslint-comments "^3.1.2"
eslint-plugin-flowtype "2.50.3"
eslint-plugin-jest "22.4.1"
- eslint-plugin-prettier "2.6.2"
- eslint-plugin-react "7.12.4"
- eslint-plugin-react-hooks "^1.5.1"
- eslint-plugin-react-native "3.6.0"
- prettier "1.16.4"
+ eslint-plugin-prettier "3.1.2"
+ eslint-plugin-react "7.19.0"
+ eslint-plugin-react-hooks "^3.0.0"
+ eslint-plugin-react-native "3.8.1"
+ prettier "^2.0.2"
-"@types/babel__core@^7.1.0":
- version "7.1.3"
- resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.3.tgz#e441ea7df63cd080dfcd02ab199e6d16a735fc30"
- integrity sha512-8fBo0UR2CcwWxeX7WIIgJ7lXjasFxoYgRnFHUj+hRvKkpiBJbxhdAPTCY6/ZKM0uxANFVzt4yObSLuTiTnazDA==
+"@react-native-community/eslint-plugin@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@react-native-community/eslint-plugin/-/eslint-plugin-1.1.0.tgz#e42b1bef12d2415411519fd528e64b593b1363dc"
+ integrity sha512-W/J0fNYVO01tioHjvYWQ9m6RgndVtbElzYozBq1ZPrHO/iCzlqoySHl4gO/fpCl9QEFjvJfjPgtPMTMlsoq5DQ==
+
+"@react-native-picker/picker@^1.9.11":
+ version "1.16.8"
+ resolved "https://registry.yarnpkg.com/@react-native-picker/picker/-/picker-1.16.8.tgz#2126ca54d4a5a3e9ea5e3f39ad1e6643f8e4b3d4"
+ integrity sha512-pacdQDX6V6EmjF+HoiIh6u++qx4mTK0WnhgUHRc01B+Qt5eoeUwseBqmqfTSXTx/aHDEd6PiIw7UGvKgFoqgFQ==
+
+"@react-native-windows/cli@0.63.14":
+ version "0.63.14"
+ resolved "https://registry.yarnpkg.com/@react-native-windows/cli/-/cli-0.63.14.tgz#b077f2d090f2d63f2defa71926c4de77b0041ea8"
+ integrity sha512-RqKnAwrsA2aKqP4gYLktOrqorqvIiUMXUhe07GPh/GDzoizVgSjcgRD4x8hoxNXbU66fYFm+whvCBgfn88Ffpg==
+ dependencies:
+ "@react-native-windows/telemetry" "^0.63.5"
+ "@xmldom/xmldom" "^0.7.5"
+ chalk "^3.0.0"
+ cli-spinners "^2.2.0"
+ envinfo "^7.5.0"
+ find-up "^4.1.0"
+ glob "^7.1.1"
+ inquirer "^3.0.6"
+ mustache "^4.0.1"
+ nuget-exe "5.8.0"
+ ora "^3.4.0"
+ semver "^7.1.3"
+ shelljs "^0.8.4"
+ username "^5.1.0"
+ uuid "^3.3.2"
+ xml-parser "^1.2.1"
+ xpath "^0.0.27"
+
+"@react-native-windows/telemetry@^0.63.5":
+ version "0.63.5"
+ resolved "https://registry.yarnpkg.com/@react-native-windows/telemetry/-/telemetry-0.63.5.tgz#77d3a490b26490a642e7d7ce21cd5c06b768f4be"
+ integrity sha512-Ifd54IIcGbPjwAGfjJkRfdk5+SNtc9oCWgKMrJszIrlJ1REYVUXBo+6Xw3taKyA1Jf1eCB7DWlb98/NbqdLgcg==
+ dependencies:
+ applicationinsights "^1.8.8"
+
+"@react-native/normalize-color@*":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@react-native/normalize-color/-/normalize-color-2.0.0.tgz#da955909432474a9a0fe1cbffc66576a0447f567"
+ integrity sha512-Wip/xsc5lw8vsBlmY2MO/gFLp3MvuZ2baBZjDeTjjndMgM0h5sxz7AZR62RDPGgstp8Np7JzjvVqVT7tpFZqsw==
+
+"@sinonjs/commons@^1.7.0":
+ version "1.8.3"
+ resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d"
+ integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==
+ dependencies:
+ type-detect "4.0.8"
+
+"@types/babel__core@^7.1.7":
+ version "7.1.18"
+ resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.18.tgz#1a29abcc411a9c05e2094c98f9a1b7da6cdf49f8"
+ integrity sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==
dependencies:
"@babel/parser" "^7.1.0"
"@babel/types" "^7.0.0"
@@ -936,24 +1184,24 @@
"@types/babel__traverse" "*"
"@types/babel__generator@*":
- version "7.0.2"
- resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.0.2.tgz#d2112a6b21fad600d7674274293c85dce0cb47fc"
- integrity sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ==
+ version "7.6.4"
+ resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7"
+ integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==
dependencies:
"@babel/types" "^7.0.0"
"@types/babel__template@*":
- version "7.0.2"
- resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307"
- integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==
+ version "7.4.1"
+ resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969"
+ integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==
dependencies:
"@babel/parser" "^7.1.0"
"@babel/types" "^7.0.0"
"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6":
- version "7.0.7"
- resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.7.tgz#2496e9ff56196cc1429c72034e07eab6121b6f3f"
- integrity sha512-CeBpmX1J8kWLcDEnI3Cl2Eo6RfbGvzUctA+CjZUhOKDFbLfcr7fc4usEqLNWetrlJd7RhAkyYe2czXop4fICpw==
+ version "7.14.2"
+ resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43"
+ integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==
dependencies:
"@babel/types" "^7.3.0"
@@ -962,30 +1210,78 @@
resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d"
integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==
-"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0":
- 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/graceful-fs@^4.1.2":
+ version "4.1.5"
+ resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15"
+ integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==
+ dependencies:
+ "@types/node" "*"
+
+"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1":
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44"
+ integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==
"@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==
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686"
+ integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==
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==
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2"
+ integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==
dependencies:
"@types/istanbul-lib-coverage" "*"
"@types/istanbul-lib-report" "*"
"@types/json-schema@^7.0.3":
- version "7.0.3"
- resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636"
- integrity sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A==
+ version "7.0.9"
+ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d"
+ integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==
+
+"@types/node@*":
+ version "17.0.14"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.14.tgz#33b9b94f789a8fedd30a68efdbca4dbb06b61f20"
+ integrity sha512-SbjLmERksKOGzWzPNuW7fJM7fk3YXVTFiZWB/Hs99gwhk+/dnrQRPBQjPW9aO+fi1tAffi9PrwFvsmOKmDTyng==
+
+"@types/normalize-package-data@^2.4.0":
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301"
+ integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==
+
+"@types/prettier@^1.19.0":
+ version "1.19.1"
+ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f"
+ integrity sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ==
+
+"@types/prop-types@*":
+ version "15.7.5"
+ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf"
+ integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==
+
+"@types/react-native@^0.67.6":
+ version "0.67.7"
+ resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.67.7.tgz#903b7d56fb6a95ca0de897f2925c04ee0d4adee3"
+ integrity sha512-G7vi9vE226diNNXVNbIa8HH/wPxMWHTHkn9iQtQSezaWzO5WNsKZZW2/TOzCehtBDVx4MZieTs6GsdtpBBttMA==
+ dependencies:
+ "@types/react" "*"
+
+"@types/react@*", "@types/react@^18.0.6":
+ version "18.0.9"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.9.tgz#d6712a38bd6cd83469603e7359511126f122e878"
+ integrity sha512-9bjbg1hJHUm4De19L1cHiW0Jvx3geel6Qczhjd0qY5VKVE2X5+x77YxAepuCwVh4vrgZJdgEJw48zrhRIeF4Nw==
+ dependencies:
+ "@types/prop-types" "*"
+ "@types/scheduler" "*"
+ csstype "^3.0.2"
+
+"@types/scheduler@*":
+ version "0.16.2"
+ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39"
+ integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==
"@types/stack-utils@^1.0.1":
version "1.0.1"
@@ -993,63 +1289,76 @@
integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==
"@types/yargs-parser@*":
- version "13.1.0"
- resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.1.0.tgz#c563aa192f39350a1d18da36c5a8da382bbd8228"
- integrity sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg==
+ version "20.2.1"
+ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129"
+ integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==
"@types/yargs@^13.0.0":
- version "13.0.2"
- resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.2.tgz#a64674fc0149574ecd90ba746e932b5a5f7b3653"
- integrity sha512-lwwgizwk/bIIU+3ELORkyuOgDjCh7zuWDFqRtPPhhVgq9N1F7CvLNKg1TX4f2duwtKQ0p044Au9r1PLIXHrIzQ==
+ version "13.0.12"
+ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.12.tgz#d895a88c703b78af0465a9de88aa92c61430b092"
+ integrity sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==
dependencies:
"@types/yargs-parser" "*"
-"@typescript-eslint/eslint-plugin@^1.5.0":
- version "1.13.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.13.0.tgz#22fed9b16ddfeb402fd7bcde56307820f6ebc49f"
- integrity sha512-WQHCozMnuNADiqMtsNzp96FNox5sOVpU8Xt4meaT4em8lOG1SrOv92/mUbEHQVh90sldKSfcOc/I0FOb/14G1g==
+"@types/yargs@^15.0.0":
+ version "15.0.14"
+ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.14.tgz#26d821ddb89e70492160b66d10a0eb6df8f6fb06"
+ integrity sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==
dependencies:
- "@typescript-eslint/experimental-utils" "1.13.0"
- eslint-utils "^1.3.1"
- functional-red-black-tree "^1.0.1"
- regexpp "^2.0.1"
- tsutils "^3.7.0"
+ "@types/yargs-parser" "*"
-"@typescript-eslint/experimental-utils@1.13.0":
- version "1.13.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz#b08c60d780c0067de2fb44b04b432f540138301e"
- integrity sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg==
+"@typescript-eslint/eslint-plugin@^2.25.0":
+ version "2.34.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz#6f8ce8a46c7dea4a6f1d171d2bb8fbae6dac2be9"
+ integrity sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==
+ dependencies:
+ "@typescript-eslint/experimental-utils" "2.34.0"
+ functional-red-black-tree "^1.0.1"
+ regexpp "^3.0.0"
+ tsutils "^3.17.1"
+
+"@typescript-eslint/experimental-utils@2.34.0":
+ version "2.34.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz#d3524b644cdb40eebceca67f8cf3e4cc9c8f980f"
+ integrity sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==
dependencies:
"@types/json-schema" "^7.0.3"
- "@typescript-eslint/typescript-estree" "1.13.0"
- eslint-scope "^4.0.0"
+ "@typescript-eslint/typescript-estree" "2.34.0"
+ eslint-scope "^5.0.0"
+ eslint-utils "^2.0.0"
-"@typescript-eslint/parser@^1.5.0":
- version "1.13.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-1.13.0.tgz#61ac7811ea52791c47dc9fd4dd4a184fae9ac355"
- integrity sha512-ITMBs52PCPgLb2nGPoeT4iU3HdQZHcPaZVw+7CsFagRJHUhyeTgorEwHXhFf3e7Evzi8oujKNpHc8TONth8AdQ==
+"@typescript-eslint/parser@^2.25.0":
+ version "2.34.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.34.0.tgz#50252630ca319685420e9a39ca05fe185a256bc8"
+ integrity sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==
dependencies:
"@types/eslint-visitor-keys" "^1.0.0"
- "@typescript-eslint/experimental-utils" "1.13.0"
- "@typescript-eslint/typescript-estree" "1.13.0"
- eslint-visitor-keys "^1.0.0"
+ "@typescript-eslint/experimental-utils" "2.34.0"
+ "@typescript-eslint/typescript-estree" "2.34.0"
+ eslint-visitor-keys "^1.1.0"
-"@typescript-eslint/typescript-estree@1.13.0":
- version "1.13.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz#8140f17d0f60c03619798f1d628b8434913dc32e"
- integrity sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw==
+"@typescript-eslint/typescript-estree@2.34.0":
+ version "2.34.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz#14aeb6353b39ef0732cc7f1b8285294937cf37d5"
+ integrity sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==
dependencies:
- lodash.unescape "4.0.1"
- semver "5.5.0"
+ debug "^4.1.1"
+ eslint-visitor-keys "^1.1.0"
+ glob "^7.1.6"
+ is-glob "^4.0.1"
+ lodash "^4.17.15"
+ semver "^7.3.2"
+ tsutils "^3.17.1"
+
+"@xmldom/xmldom@^0.7.5":
+ version "0.7.5"
+ resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.7.5.tgz#09fa51e356d07d0be200642b0e4f91d8e6dd408d"
+ integrity sha512-V3BIhmY36fXZ1OtVcI9W+FxQqxVLsPKcNjWigIaa81dLC9IolJl5Mt4Cvhmr0flUnjSpTdrbMTSbXqYqV5dT6A==
abab@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f"
- integrity sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==
-
-abbrev@1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f"
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a"
+ integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==
abort-controller@^3.0.0:
version "3.0.0"
@@ -1061,6 +1370,7 @@ abort-controller@^3.0.0:
absolute-path@^0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/absolute-path/-/absolute-path-0.0.0.tgz#a78762fbdadfb5297be99b15d35a785b2f095bf7"
+ integrity sha1-p4di+9rftSl76ZsV01p4Wy8JW/c=
accepts@~1.3.5, accepts@~1.3.7:
version "1.3.7"
@@ -1070,58 +1380,48 @@ accepts@~1.3.5, accepts@~1.3.7:
mime-types "~2.1.24"
negotiator "0.6.2"
-acorn-globals@^4.1.0:
- version "4.3.2"
- resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.2.tgz#4e2c2313a597fd589720395f6354b41cd5ec8006"
- integrity sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ==
+acorn-globals@^4.3.2:
+ version "4.3.4"
+ resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7"
+ integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==
dependencies:
acorn "^6.0.1"
acorn-walk "^6.0.1"
-acorn-jsx@^5.0.2:
- version "5.0.2"
- resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.2.tgz#84b68ea44b373c4f8686023a551f61a21b7c4a4f"
- integrity sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw==
+acorn-jsx@^5.2.0:
+ version "5.3.2"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
+ integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
acorn-walk@^6.0.1:
- version "6.1.1"
- resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.1.tgz#d363b66f5fac5f018ff9c3a1e7b6f8e310cc3913"
- integrity sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==
-
-acorn@^5.5.3:
- version "5.7.3"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279"
- integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c"
+ integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==
acorn@^6.0.1:
- version "6.1.1"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f"
- integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==
+ version "6.4.2"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6"
+ integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==
-acorn@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.0.0.tgz#26b8d1cd9a9b700350b71c0905546f64d1284e7a"
- integrity sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ==
+acorn@^7.1.0, acorn@^7.1.1:
+ version "7.4.1"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
+ integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
-ajv@^6.10.0, ajv@^6.10.2:
- version "6.10.2"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52"
- integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==
+ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3:
+ version "6.12.6"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+ integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
dependencies:
- fast-deep-equal "^2.0.1"
+ fast-deep-equal "^3.1.1"
fast-json-stable-stringify "^2.0.0"
json-schema-traverse "^0.4.1"
uri-js "^4.2.2"
-ajv@^6.5.5:
- version "6.10.0"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1"
- integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==
- dependencies:
- fast-deep-equal "^2.0.1"
- fast-json-stable-stringify "^2.0.0"
- json-schema-traverse "^0.4.1"
- uri-js "^4.2.2"
+anser@^1.4.9:
+ version "1.4.10"
+ resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.10.tgz#befa3eddf282684bd03b63dcda3927aef8c2e35b"
+ integrity sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==
ansi-colors@^1.0.1:
version "1.1.0"
@@ -1137,11 +1437,18 @@ ansi-cyan@^0.1.1:
dependencies:
ansi-wrap "0.1.0"
-ansi-escapes@^3.0.0, ansi-escapes@^3.2.0:
+ansi-escapes@^3.0.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
+ansi-escapes@^4.2.1:
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e"
+ integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==
+ dependencies:
+ type-fest "^0.21.3"
+
ansi-fragments@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/ansi-fragments/-/ansi-fragments-0.2.1.tgz#24409c56c4cc37817c3d7caa99d8969e2de5a05e"
@@ -1165,10 +1472,6 @@ ansi-red@^0.1.1:
dependencies:
ansi-wrap "0.1.0"
-ansi-regex@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
-
ansi-regex@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
@@ -1179,6 +1482,11 @@ ansi-regex@^4.0.0, ansi-regex@^4.1.0:
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
+ansi-regex@^5.0.0, ansi-regex@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
+ integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+
ansi-styles@^3.2.0, ansi-styles@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
@@ -1186,6 +1494,13 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1:
dependencies:
color-convert "^1.9.0"
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+ integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+ dependencies:
+ color-convert "^2.0.1"
+
ansi-wrap@0.1.0, ansi-wrap@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf"
@@ -1199,17 +1514,23 @@ anymatch@^2.0.0:
micromatch "^3.1.4"
normalize-path "^2.1.1"
-aproba@^1.0.3:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
- integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
-
-are-we-there-yet@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3"
+anymatch@^3.0.3:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
+ integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
dependencies:
- delegates "^1.0.0"
- readable-stream "^2.0.0 || ^1.1.13"
+ normalize-path "^3.0.0"
+ picomatch "^2.0.4"
+
+applicationinsights@^1.8.8:
+ version "1.8.10"
+ resolved "https://registry.yarnpkg.com/applicationinsights/-/applicationinsights-1.8.10.tgz#fffa482cd1519880fb888536a87081ac05130667"
+ integrity sha512-ZLDA7mShh4mP2Z/HlFolmvhBPX1LfnbIWXrselyYVA7EKjHhri1fZzpu2EiWAmfbRxNBY6fRjoPJWbx5giKy4A==
+ dependencies:
+ cls-hooked "^4.2.2"
+ continuation-local-storage "^3.2.1"
+ diagnostic-channel "0.3.1"
+ diagnostic-channel-publishers "0.4.4"
argparse@^1.0.7:
version "1.0.10"
@@ -1231,11 +1552,7 @@ arr-diff@^4.0.0:
resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
-arr-flatten@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b"
-
-arr-flatten@^1.1.0:
+arr-flatten@^1.0.1, arr-flatten@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
@@ -1258,22 +1575,28 @@ array-equal@^1.0.0:
array-filter@~0.0.0:
version "0.0.1"
resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec"
+ integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw=
-array-includes@^3.0.3:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d"
- integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=
+array-includes@^3.1.1:
+ version "3.1.4"
+ resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9"
+ integrity sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==
dependencies:
- define-properties "^1.1.2"
- es-abstract "^1.7.0"
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+ es-abstract "^1.19.1"
+ get-intrinsic "^1.1.1"
+ is-string "^1.0.7"
array-map@~0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662"
+ integrity sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=
array-reduce@~0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b"
+ integrity sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=
array-slice@^0.2.3:
version "0.2.3"
@@ -1285,21 +1608,22 @@ array-unique@^0.3.2:
resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
-art@^0.10.0:
- version "0.10.1"
- resolved "https://registry.yarnpkg.com/art/-/art-0.10.1.tgz#38541883e399225c5e193ff246e8f157cf7b2146"
-
-asap@~2.0.3:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f"
+asap@~2.0.3, asap@~2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
+ integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=
asn1@~0.2.3:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
+ version "0.2.6"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d"
+ integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==
+ dependencies:
+ safer-buffer "~2.1.0"
-assert-plus@^1.0.0:
+assert-plus@1.0.0, assert-plus@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+ integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
assign-symbols@^1.0.0:
version "1.0.0"
@@ -1311,23 +1635,34 @@ astral-regex@^1.0.0:
resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
-async-limiter@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8"
- integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==
+async-hook-jl@^1.7.6:
+ version "1.7.6"
+ resolved "https://registry.yarnpkg.com/async-hook-jl/-/async-hook-jl-1.7.6.tgz#4fd25c2f864dbaf279c610d73bf97b1b28595e68"
+ integrity sha512-gFaHkFfSxTjvoxDMYqDuGHlcRyUuamF8s+ZTtJdDzqjws4mCt7v0vuV79/E2Wr2/riMQgtG4/yUtXWs1gZ7JMg==
+ dependencies:
+ stack-chain "^1.3.7"
+
+async-listener@^0.6.0:
+ version "0.6.10"
+ resolved "https://registry.yarnpkg.com/async-listener/-/async-listener-0.6.10.tgz#a7c97abe570ba602d782273c0de60a51e3e17cbc"
+ integrity sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw==
+ dependencies:
+ semver "^5.3.0"
+ shimmer "^1.1.0"
async@^2.4.0:
- version "2.6.2"
- resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381"
- integrity sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
+ integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==
dependencies:
- lodash "^4.17.11"
+ lodash "^4.17.14"
asynckit@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
-atob@^2.1.1:
+atob@^2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
@@ -1338,68 +1673,124 @@ aws-sign2@~0.7.0:
integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
aws4@^1.8.0:
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
- integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
+ integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
-babel-eslint@10.0.1:
- version "10.0.1"
- resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.1.tgz#919681dc099614cd7d31d45c8908695092a1faed"
- integrity sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==
+babel-eslint@10.1.0:
+ version "10.1.0"
+ resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232"
+ integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==
dependencies:
"@babel/code-frame" "^7.0.0"
- "@babel/parser" "^7.0.0"
- "@babel/traverse" "^7.0.0"
- "@babel/types" "^7.0.0"
- eslint-scope "3.7.1"
+ "@babel/parser" "^7.7.0"
+ "@babel/traverse" "^7.7.0"
+ "@babel/types" "^7.7.0"
eslint-visitor-keys "^1.0.0"
+ resolve "^1.12.0"
-babel-jest@^24.9.0:
- version "24.9.0"
- resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.9.0.tgz#3fc327cb8467b89d14d7bc70e315104a783ccd54"
- integrity sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==
+babel-jest@^25.1.0, babel-jest@^25.5.1:
+ version "25.5.1"
+ resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-25.5.1.tgz#bc2e6101f849d6f6aec09720ffc7bc5332e62853"
+ integrity sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ==
dependencies:
- "@jest/transform" "^24.9.0"
- "@jest/types" "^24.9.0"
- "@types/babel__core" "^7.1.0"
- babel-plugin-istanbul "^5.1.0"
- babel-preset-jest "^24.9.0"
- chalk "^2.4.2"
- slash "^2.0.0"
+ "@jest/transform" "^25.5.1"
+ "@jest/types" "^25.5.0"
+ "@types/babel__core" "^7.1.7"
+ babel-plugin-istanbul "^6.0.0"
+ babel-preset-jest "^25.5.0"
+ chalk "^3.0.0"
+ graceful-fs "^4.2.4"
+ slash "^3.0.0"
-babel-plugin-dynamic-import-node@^2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f"
- integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==
+babel-plugin-dynamic-import-node@^2.3.3:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3"
+ integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==
dependencies:
object.assign "^4.1.0"
-babel-plugin-istanbul@^5.1.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854"
- integrity sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==
+babel-plugin-istanbul@^6.0.0:
+ version "6.1.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73"
+ integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
- find-up "^3.0.0"
- istanbul-lib-instrument "^3.3.0"
- test-exclude "^5.2.3"
+ "@istanbuljs/load-nyc-config" "^1.0.0"
+ "@istanbuljs/schema" "^0.1.2"
+ istanbul-lib-instrument "^5.0.4"
+ test-exclude "^6.0.0"
-babel-plugin-jest-hoist@^24.9.0:
- version "24.9.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz#4f837091eb407e01447c8843cbec546d0002d756"
- integrity sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==
+babel-plugin-jest-hoist@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.5.0.tgz#129c80ba5c7fc75baf3a45b93e2e372d57ca2677"
+ integrity sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g==
dependencies:
+ "@babel/template" "^7.3.3"
+ "@babel/types" "^7.3.3"
"@types/babel__traverse" "^7.0.6"
+babel-plugin-module-resolver@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-4.1.0.tgz#22a4f32f7441727ec1fbf4967b863e1e3e9f33e2"
+ integrity sha512-MlX10UDheRr3lb3P0WcaIdtCSRlxdQsB1sBqL7W0raF070bGl1HQQq5K3T2vf2XAYie+ww+5AKC/WrkjRO2knA==
+ dependencies:
+ find-babel-config "^1.2.0"
+ glob "^7.1.6"
+ pkg-up "^3.1.0"
+ reselect "^4.0.0"
+ resolve "^1.13.1"
+
+babel-plugin-polyfill-corejs2@^0.3.0:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5"
+ integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==
+ dependencies:
+ "@babel/compat-data" "^7.13.11"
+ "@babel/helper-define-polyfill-provider" "^0.3.1"
+ semver "^6.1.1"
+
+babel-plugin-polyfill-corejs3@^0.5.0:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.1.tgz#d66183bf10976ea677f4149a7fcc4d8df43d4060"
+ integrity sha512-TihqEe4sQcb/QcPJvxe94/9RZuLQuF1+To4WqQcRvc+3J3gLCPIPgDKzGLG6zmQLfH3nn25heRuDNkS2KR4I8A==
+ dependencies:
+ "@babel/helper-define-polyfill-provider" "^0.3.1"
+ core-js-compat "^3.20.0"
+
+babel-plugin-polyfill-regenerator@^0.3.0:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990"
+ integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==
+ dependencies:
+ "@babel/helper-define-polyfill-provider" "^0.3.1"
+
babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0:
version "7.0.0-beta.0"
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf"
integrity sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==
-babel-preset-fbjs@^3.1.2, babel-preset-fbjs@^3.2.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-3.2.0.tgz#c0e6347d3e0379ed84b3c2434d3467567aa05297"
- integrity sha512-5Jo+JeWiVz2wHUUyAlvb/sSYnXNig9r+HqGAOSfh5Fzxp7SnAaR/tEGRJ1ZX7C77kfk82658w6R5Z+uPATTD9g==
+babel-preset-current-node-syntax@^0.1.2:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.4.tgz#826f1f8e7245ad534714ba001f84f7e906c3b615"
+ integrity sha512-5/INNCYhUGqw7VbVjT/hb3ucjgkVHKXY7lX3ZjlN4gm565VyFmJUrJ/h+h16ECVB38R/9SF6aACydpKMLZ/c9w==
+ dependencies:
+ "@babel/plugin-syntax-async-generators" "^7.8.4"
+ "@babel/plugin-syntax-bigint" "^7.8.3"
+ "@babel/plugin-syntax-class-properties" "^7.8.3"
+ "@babel/plugin-syntax-import-meta" "^7.8.3"
+ "@babel/plugin-syntax-json-strings" "^7.8.3"
+ "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+ "@babel/plugin-syntax-numeric-separator" "^7.8.3"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+
+babel-preset-fbjs@^3.2.0, babel-preset-fbjs@^3.3.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz#38a14e5a7a3b285a3f3a86552d650dca5cf6111c"
+ integrity sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==
dependencies:
"@babel/plugin-proposal-class-properties" "^7.0.0"
"@babel/plugin-proposal-object-rest-spread" "^7.0.0"
@@ -1429,31 +1820,23 @@ babel-preset-fbjs@^3.1.2, babel-preset-fbjs@^3.2.0:
"@babel/plugin-transform-template-literals" "^7.0.0"
babel-plugin-syntax-trailing-function-commas "^7.0.0-beta.0"
-babel-preset-jest@^24.9.0:
- version "24.9.0"
- resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz#192b521e2217fb1d1f67cf73f70c336650ad3cdc"
- integrity sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==
+babel-preset-jest@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-25.5.0.tgz#c1d7f191829487a907764c65307faa0e66590b49"
+ integrity sha512-8ZczygctQkBU+63DtSOKGh7tFL0CeCuz+1ieud9lJ1WPQ9O6A1a/r+LGn6Y705PA6whHQ3T1XuB/PmpfNYf8Fw==
dependencies:
- "@babel/plugin-syntax-object-rest-spread" "^7.0.0"
- babel-plugin-jest-hoist "^24.9.0"
-
-balanced-match@^0.4.1:
- version "0.4.2"
- resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
+ babel-plugin-jest-hoist "^25.5.0"
+ babel-preset-current-node-syntax "^0.1.2"
balanced-match@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
- integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+ integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
-base64-js@^1.1.2:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1"
-
-base64-js@^1.2.3:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3"
- integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==
+base64-js@^1.1.2, base64-js@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
+ integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
base@^0.11.1:
version "0.11.2"
@@ -1468,44 +1851,38 @@ base@^0.11.1:
mixin-deep "^1.2.0"
pascalcase "^0.1.1"
-basic-auth@~2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a"
- integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==
- dependencies:
- safe-buffer "5.1.2"
-
bcrypt-pbkdf@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d"
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
+ integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
dependencies:
tweetnacl "^0.14.3"
-big-integer@^1.6.7:
- version "1.6.44"
- resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.44.tgz#4ee9ae5f5839fc11ade338fea216b4513454a539"
- integrity sha512-7MzElZPTyJ2fNvBkPxtFQ2fWIkVmuzw41+BZHSzpEq3ymB2MfeKp1+yXl/tS75xCx+WnyV+yb0kp+K1C3UNwmQ==
+big-integer@1.6.x:
+ version "1.6.51"
+ resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686"
+ integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==
-bplist-creator@0.0.7:
- version "0.0.7"
- resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.7.tgz#37df1536092824b87c42f957b01344117372ae45"
- integrity sha1-N98VNgkoJLh8QvlXsBNEEXNyrkU=
+bindings@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
+ integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
dependencies:
- stream-buffers "~2.2.0"
+ file-uri-to-path "1.0.0"
-bplist-parser@0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.1.1.tgz#d60d5dcc20cba6dc7e1f299b35d3e1f95dafbae6"
- integrity sha1-1g1dzCDLptx+HymbNdPh+V2vuuY=
+bplist-creator@0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.1.0.tgz#018a2d1b587f769e379ef5519103730f8963ba1e"
+ integrity sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==
dependencies:
- big-integer "^1.6.7"
+ stream-buffers "2.2.x"
-brace-expansion@^1.0.0:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9"
+bplist-parser@0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.3.0.tgz#ba50666370f61bbf94881636cd9f7d23c5286090"
+ integrity sha512-zgmaRvT6AN1JpPPV+S0a1/FAtoxSreYDccZGIqEMSvZl9DMe70mJ7MFzpxa1X+gHVdkToE2haRUHHMiW1OdejA==
dependencies:
- balanced-match "^0.4.1"
- concat-map "0.0.1"
+ big-integer "1.6.x"
brace-expansion@^1.1.7:
version "1.1.11"
@@ -1531,10 +1908,17 @@ braces@^2.3.1:
split-string "^3.0.2"
to-regex "^3.0.1"
-browser-process-hrtime@^0.1.2:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4"
- integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==
+braces@^3.0.1:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+ integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+ dependencies:
+ fill-range "^7.0.1"
+
+browser-process-hrtime@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626"
+ integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==
browser-resolve@^1.11.3:
version "1.11.3"
@@ -1543,10 +1927,21 @@ browser-resolve@^1.11.3:
dependencies:
resolve "1.1.7"
-bser@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719"
- integrity sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=
+browserslist@^4.17.5, browserslist@^4.19.1:
+ version "4.19.1"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.1.tgz#4ac0435b35ab655896c31d53018b6dd5e9e4c9a3"
+ integrity sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==
+ dependencies:
+ caniuse-lite "^1.0.30001286"
+ electron-to-chromium "^1.4.17"
+ escalade "^3.1.1"
+ node-releases "^2.0.1"
+ picocolors "^1.0.0"
+
+bser@2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
+ integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==
dependencies:
node-int64 "^0.4.0"
@@ -1556,17 +1951,9 @@ buffer-crc32@^0.2.13:
integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
buffer-from@^1.0.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
- integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
-
-buffer-shims@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
-
-builtin-modules@^1.0.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
+ integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
bytes@3.0.0:
version "3.0.0"
@@ -1588,6 +1975,14 @@ cache-base@^1.0.1:
union-value "^1.0.0"
unset-value "^1.0.0"
+call-bind@^1.0.0, call-bind@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
+ integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
+ dependencies:
+ function-bind "^1.1.1"
+ get-intrinsic "^1.0.2"
+
caller-callsite@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134"
@@ -1612,16 +2007,16 @@ callsites@^3.0.0:
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
-camelcase@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
- integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=
-
camelcase@^5.0.0, camelcase@^5.3.1:
version "5.3.1"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
+caniuse-lite@^1.0.30001286:
+ version "1.0.30001304"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001304.tgz#38af55ed3fc8220cb13e35e6e7309c8c65a05559"
+ integrity sha512-bdsfZd6K6ap87AGqSHJP/s1V+U6Z5lyrcbBu3ovbCCf8cSYpwTtGrCBObMpJqwxfTbLW6YTIdbb1jEeTelcpYQ==
+
capture-exit@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4"
@@ -1632,6 +2027,7 @@ capture-exit@^2.0.0:
caseless@~0.12.0:
version "0.12.0"
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+ integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2:
version "2.4.2"
@@ -1642,6 +2038,22 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2:
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
+chalk@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4"
+ integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+chalk@^4.1.0:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
+ integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
chardet@^0.4.0:
version "0.4.2"
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2"
@@ -1652,11 +2064,6 @@ chardet@^0.7.0:
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
-chownr@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494"
- integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==
-
ci-info@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
@@ -1679,31 +2086,27 @@ cli-cursor@^2.1.0:
dependencies:
restore-cursor "^2.0.0"
-cli-spinners@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.2.0.tgz#e8b988d9206c692302d8ee834e7a85c0144d8f77"
- integrity sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ==
+cli-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
+ integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
+ dependencies:
+ restore-cursor "^3.1.0"
+
+cli-spinners@^2.0.0, cli-spinners@^2.2.0:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d"
+ integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==
cli-width@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a"
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48"
+ integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==
-cliui@^3.2.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
- dependencies:
- string-width "^1.0.1"
- strip-ansi "^3.0.1"
- wrap-ansi "^2.0.0"
-
-cliui@^4.0.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49"
- integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==
- dependencies:
- string-width "^2.1.1"
- strip-ansi "^4.0.0"
- wrap-ansi "^2.0.0"
+cli-width@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6"
+ integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==
cliui@^5.0.0:
version "5.0.0"
@@ -1714,18 +2117,47 @@ cliui@^5.0.0:
strip-ansi "^5.2.0"
wrap-ansi "^5.1.0"
+cliui@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1"
+ integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==
+ dependencies:
+ string-width "^4.2.0"
+ strip-ansi "^6.0.0"
+ wrap-ansi "^6.2.0"
+
+clone-deep@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387"
+ integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==
+ dependencies:
+ is-plain-object "^2.0.4"
+ kind-of "^6.0.2"
+ shallow-clone "^3.0.0"
+
clone@^1.0.2:
version "1.0.4"
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
+cls-hooked@^4.2.2:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/cls-hooked/-/cls-hooked-4.2.2.tgz#ad2e9a4092680cdaffeb2d3551da0e225eae1908"
+ integrity sha512-J4Xj5f5wq/4jAvcdgoGsL3G103BtWpZrMo8NEinRltN+xpTZdI+M38pyQqhuFU/P792xkMFvnKSf+Lm81U1bxw==
+ dependencies:
+ async-hook-jl "^1.7.6"
+ emitter-listener "^1.0.1"
+ semver "^5.4.1"
+
co@^4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+ integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
-code-point-at@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+collect-v8-coverage@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59"
+ integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==
collection-visit@^1.0.0:
version "1.0.0"
@@ -1742,20 +2174,32 @@ color-convert@^1.9.0:
dependencies:
color-name "1.1.3"
+color-convert@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+ dependencies:
+ color-name "~1.1.4"
+
color-name@1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+color-name@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
color-support@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2"
integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==
colorette@^1.0.7:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.1.0.tgz#1f943e5a357fac10b4e0f5aaef3b14cdc1af6ec7"
- integrity sha512-6S062WDQUXi6hOfkO/sBPVwE5ASXY4G2+b4atvhJfSsuUUhIaUKlkjLe9692Ipyt5/a+IPF5aVTu3V5gvXq5cg==
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40"
+ integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==
combined-stream@^1.0.6, combined-stream@~1.0.6:
version "1.0.8"
@@ -1764,10 +2208,15 @@ combined-stream@^1.0.6, combined-stream@~1.0.6:
dependencies:
delayed-stream "~1.0.0"
-commander@^2.19.0, commander@~2.20.0:
- version "2.20.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422"
- integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==
+command-exists@^1.2.8:
+ version "1.2.9"
+ resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69"
+ integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==
+
+commander@^2.19.0:
+ version "2.20.3"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+ integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
commander@~2.13.0:
version "2.13.0"
@@ -1777,6 +2226,7 @@ commander@~2.13.0:
commondir@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+ integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
component-emitter@^1.2.1:
version "1.3.0"
@@ -1784,11 +2234,11 @@ component-emitter@^1.2.1:
integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
compressible@~2.0.16:
- version "2.0.17"
- resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.17.tgz#6e8c108a16ad58384a977f3a482ca20bff2f38c1"
- integrity sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==
+ version "2.0.18"
+ resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
+ integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==
dependencies:
- mime-db ">= 1.40.0 < 2"
+ mime-db ">= 1.43.0 < 2"
compression@^1.7.1:
version "1.7.4"
@@ -1806,6 +2256,7 @@ compression@^1.7.1:
concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
concat-stream@^1.6.0:
version "1.6.2"
@@ -1827,19 +2278,18 @@ connect@^3.6.5:
parseurl "~1.3.3"
utils-merge "1.0.1"
-console-control-strings@^1.0.0, console-control-strings@~1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
- integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
+continuation-local-storage@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz#11f613f74e914fe9b34c92ad2d28fe6ae1db7ffb"
+ integrity sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA==
+ dependencies:
+ async-listener "^0.6.0"
+ emitter-listener "^1.1.1"
-convert-source-map@^1.1.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.4.0.tgz#e3dad195bf61bfe13a7a3c73e9876ec14a0268f3"
-
-convert-source-map@^1.4.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20"
- integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==
+convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369"
+ integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==
dependencies:
safe-buffer "~5.1.1"
@@ -1848,22 +2298,33 @@ copy-descriptor@^0.1.0:
resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
-core-js@^1.0.0:
- version "1.2.7"
- resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
+core-js-compat@^3.20.0:
+ version "3.20.3"
+ resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.20.3.tgz#d71f85f94eb5e4bea3407412e549daa083d23bd6"
+ integrity sha512-c8M5h0IkNZ+I92QhIpuSijOxGAcj3lgpsWdkCqmUTZNwidujF4r3pi6x1DCN+Vcs5qTS2XWWMfWSuCqyupX8gw==
+ dependencies:
+ browserslist "^4.19.1"
+ semver "7.0.0"
-core-js@^2.2.2:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e"
+core-js-pure@^3.20.2:
+ version "3.20.3"
+ resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.20.3.tgz#6cc4f36da06c61d95254efc54024fe4797fd5d02"
+ integrity sha512-Q2H6tQ5MtPtcC7f3HxJ48i4Q7T9ybPKgvWyuH7JXIoNa2pm0KuBnycsET/qw1SLLZYfbsbrZQNMeIOClb+6WIA==
core-js@^2.4.1:
- version "2.6.9"
- resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2"
- integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==
+ version "2.6.12"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec"
+ integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==
-core-util-is@~1.0.0:
+core-util-is@1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+core-util-is@~1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
+ integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
cosmiconfig@^5.0.5, cosmiconfig@^5.1.0:
version "5.2.1"
@@ -1875,16 +2336,7 @@ cosmiconfig@^5.0.5, cosmiconfig@^5.1.0:
js-yaml "^3.13.1"
parse-json "^4.0.0"
-create-react-class@^15.6.3:
- version "15.6.3"
- resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036"
- integrity sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg==
- dependencies:
- fbjs "^0.8.9"
- loose-envify "^1.3.1"
- object-assign "^4.1.1"
-
-cross-spawn@^5.0.1, cross-spawn@^5.1.0:
+cross-spawn@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=
@@ -1904,25 +2356,45 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5:
shebang-command "^1.2.0"
which "^1.2.9"
-cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0":
- version "0.3.6"
- resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.6.tgz#f85206cee04efa841f3c5982a74ba96ab20d65ad"
- integrity sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A==
-
-cssstyle@^1.0.0:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.2.2.tgz#427ea4d585b18624f6fdbf9de7a2a1a3ba713077"
- integrity sha512-43wY3kl1CVQSvL7wUY1qXkxVGkStjpkDmVjiIKX8R97uhajy8Bybay78uOtqvh7Q5GK75dNPfW0geWjE6qQQow==
+cross-spawn@^7.0.0:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+ integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
dependencies:
- cssom "0.3.x"
+ path-key "^3.1.0"
+ shebang-command "^2.0.0"
+ which "^2.0.1"
+
+cssom@^0.4.1:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10"
+ integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==
+
+cssom@~0.3.6:
+ version "0.3.8"
+ resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"
+ integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==
+
+cssstyle@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852"
+ integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==
+ dependencies:
+ cssom "~0.3.6"
+
+csstype@^3.0.2:
+ version "3.0.11"
+ resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.11.tgz#d66700c5eacfac1940deb4e3ee5642792d85cd33"
+ integrity sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==
dashdash@^1.12.0:
version "1.14.1"
resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
dependencies:
assert-plus "^1.0.0"
-data-urls@^1.0.0:
+data-urls@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe"
integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==
@@ -1932,60 +2404,49 @@ data-urls@^1.0.0:
whatwg-url "^7.0.0"
dayjs@^1.8.15:
- version "1.8.16"
- resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.8.16.tgz#2a3771de537255191b947957af2fd90012e71e64"
- integrity sha512-XPmqzWz/EJiaRHjBqSJ2s6hE/BUoCIHKgdS2QPtTQtKcS9E4/Qn0WomoH1lXanWCzri+g7zPcuNV4aTZ8PMORQ==
+ version "1.10.7"
+ resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.7.tgz#2cf5f91add28116748440866a0a1d26f3a6ce468"
+ integrity sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==
-debug@2.6.9, debug@^2.3.3:
+debug@2.6.9, debug@^2.2.0, debug@^2.3.3:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
dependencies:
ms "2.0.0"
-debug@^2.2.0:
- version "2.6.1"
- resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351"
- dependencies:
- ms "0.7.2"
-
-debug@^3.2.6:
- version "3.2.6"
- resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
- integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
- dependencies:
- ms "^2.1.1"
-
debug@^4.0.1, debug@^4.1.0, debug@^4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
- integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
+ version "4.3.3"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664"
+ integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==
dependencies:
- ms "^2.1.1"
+ ms "2.1.2"
-decamelize@^1.1.1, decamelize@^1.2.0:
+decamelize@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+ integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
decode-uri-component@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
-deep-extend@^0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
- integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
-
deep-is@~0.1.3:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
+ integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
deepmerge@^3.2.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-3.3.0.tgz#d3c47fd6f3a93d517b14426b0628a17b0125f5f7"
integrity sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==
+deepmerge@^4.2.2:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955"
+ integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==
+
defaults@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
@@ -1993,7 +2454,7 @@ defaults@^1.0.3:
dependencies:
clone "^1.0.2"
-define-properties@^1.1.2, define-properties@^1.1.3:
+define-properties@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
@@ -2025,38 +2486,53 @@ define-property@^2.0.2:
delayed-stream@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
-
-delegates@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+ integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
denodeify@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631"
+ integrity sha1-OjYof1A05pnnV3kBBSwubJQlFjE=
depd@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
+deprecated-react-native-prop-types@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/deprecated-react-native-prop-types/-/deprecated-react-native-prop-types-2.3.0.tgz#c10c6ee75ff2b6de94bb127f142b814e6e08d9ab"
+ integrity sha512-pWD0voFtNYxrVqvBMYf5gq3NA2GCpfodS1yNynTPc93AYA/KEMGeWDqqeUB6R2Z9ZofVhks2aeJXiuQqKNpesA==
+ dependencies:
+ "@react-native/normalize-color" "*"
+ invariant "*"
+ prop-types "*"
+
destroy@~1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
+ integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
-detect-libc@^1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
- integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
+detect-newline@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"
+ integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==
-detect-newline@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2"
- integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=
+diagnostic-channel-publishers@0.4.4:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/diagnostic-channel-publishers/-/diagnostic-channel-publishers-0.4.4.tgz#57c3b80b7e7f576f95be3a257d5e94550f0082d6"
+ integrity sha512-l126t01d2ZS9EreskvEtZPrcgstuvH3rbKy82oUhUrVmBaGx4hO9wECdl3cvZbKDYjMF3QJDB5z5dL9yWAjvZQ==
-diff-sequences@^24.9.0:
- version "24.9.0"
- resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5"
- integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==
+diagnostic-channel@0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/diagnostic-channel/-/diagnostic-channel-0.3.1.tgz#7faa143e107f861be3046539eb4908faab3f53fd"
+ integrity sha512-6eb9YRrimz8oTr5+JDzGmSYnXy5V7YnK5y/hd8AUDK1MssHjQKm9LlD6NSrHx4vMDF3+e/spI2hmWTviElgWZA==
+ dependencies:
+ semver "^5.3.0"
+
+diff-sequences@^25.2.6:
+ version "25.2.6"
+ resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd"
+ integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==
doctrine@^2.1.0:
version "2.1.0"
@@ -2072,10 +2548,6 @@ doctrine@^3.0.0:
dependencies:
esutils "^2.0.2"
-dom-walk@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018"
-
domexception@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90"
@@ -2084,48 +2556,63 @@ domexception@^1.0.1:
webidl-conversions "^4.0.2"
ecc-jsbn@~0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
+ integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
dependencies:
jsbn "~0.1.0"
+ safer-buffer "^2.1.0"
ee-first@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
+ integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
+
+electron-to-chromium@^1.4.17:
+ version "1.4.59"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.59.tgz#657f2588c048fb95975779f8fea101fad854de89"
+ integrity sha512-AOJ3cAE0TWxz4fQ9zkND5hWrQg16nsZKVz9INOot1oV//u4wWu5xrj9CQMmPTYskkZRunSRc9sAnr4EkexXokg==
+
+emitter-listener@^1.0.1, emitter-listener@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/emitter-listener/-/emitter-listener-1.1.2.tgz#56b140e8f6992375b3d7cb2cab1cc7432d9632e8"
+ integrity sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ==
+ dependencies:
+ shimmer "^1.2.0"
emoji-regex@^7.0.1:
version "7.0.3"
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
+emoji-regex@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+ integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
encodeurl@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
encoding@^0.1.11:
- version "0.1.12"
- resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
+ version "0.1.13"
+ resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9"
+ integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==
dependencies:
- iconv-lite "~0.4.13"
+ iconv-lite "^0.6.2"
end-of-stream@^1.1.0:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
- integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+ integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
dependencies:
once "^1.4.0"
-envinfo@^7.1.0:
- version "7.3.1"
- resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.3.1.tgz#892e42f7bf858b3446d9414ad240dbaf8da52f09"
- integrity sha512-GvXiDTqLYrORVSCuJCsWHPXF5BFvoWMQA9xX4YVjPT1jyS3aZEHUBwjzxU/6LTPF9ReHgVEbX7IEN5UvSXHw/A==
-
-error-ex@^1.2.0:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc"
- dependencies:
- is-arrayish "^0.2.1"
+envinfo@^7.5.0, envinfo@^7.7.2:
+ version "7.8.1"
+ resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475"
+ integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==
error-ex@^1.3.1:
version "1.3.2"
@@ -2134,6 +2621,13 @@ error-ex@^1.3.1:
dependencies:
is-arrayish "^0.2.1"
+error-stack-parser@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz#5a99a707bd7a4c58a797902d48d82803ede6aad8"
+ integrity sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==
+ dependencies:
+ stackframe "^1.1.1"
+
errorhandler@^1.5.0:
version "1.5.1"
resolved "https://registry.yarnpkg.com/errorhandler/-/errorhandler-1.5.1.tgz#b9ba5d17cf90744cd1e851357a6e75bf806a9a91"
@@ -2142,67 +2636,84 @@ errorhandler@^1.5.0:
accepts "~1.3.7"
escape-html "~1.0.3"
-es-abstract@^1.11.0, es-abstract@^1.7.0:
- version "1.14.2"
- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.14.2.tgz#7ce108fad83068c8783c3cdf62e504e084d8c497"
- integrity sha512-DgoQmbpFNOofkjJtKwr87Ma5EW4Dc8fWhD0R+ndq7Oc456ivUfGOOP6oAZTTKl5/CcNMP+EN+e3/iUzgE0veZg==
+es-abstract@^1.19.1:
+ version "1.19.1"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3"
+ integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==
dependencies:
- es-to-primitive "^1.2.0"
+ call-bind "^1.0.2"
+ es-to-primitive "^1.2.1"
function-bind "^1.1.1"
+ get-intrinsic "^1.1.1"
+ get-symbol-description "^1.0.0"
has "^1.0.3"
- has-symbols "^1.0.0"
- is-callable "^1.1.4"
- is-regex "^1.0.4"
- object-inspect "^1.6.0"
+ has-symbols "^1.0.2"
+ internal-slot "^1.0.3"
+ is-callable "^1.2.4"
+ is-negative-zero "^2.0.1"
+ is-regex "^1.1.4"
+ is-shared-array-buffer "^1.0.1"
+ is-string "^1.0.7"
+ is-weakref "^1.0.1"
+ object-inspect "^1.11.0"
object-keys "^1.1.1"
- string.prototype.trimleft "^2.0.0"
- string.prototype.trimright "^2.0.0"
+ object.assign "^4.1.2"
+ string.prototype.trimend "^1.0.4"
+ string.prototype.trimstart "^1.0.4"
+ unbox-primitive "^1.0.1"
-es-abstract@^1.5.1:
- version "1.13.0"
- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9"
- integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==
- dependencies:
- es-to-primitive "^1.2.0"
- function-bind "^1.1.1"
- has "^1.0.3"
- is-callable "^1.1.4"
- is-regex "^1.0.4"
- object-keys "^1.0.12"
-
-es-to-primitive@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377"
- integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==
+es-to-primitive@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
+ integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
dependencies:
is-callable "^1.1.4"
is-date-object "^1.0.1"
is-symbol "^1.0.2"
+escalade@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
+ integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
+
escape-html@~1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
+ integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
escape-string-regexp@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
-escodegen@^1.9.1:
- version "1.11.1"
- resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.1.tgz#c485ff8d6b4cdb89e27f4a856e91f118401ca510"
- integrity sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==
+escape-string-regexp@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
+ integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
+
+escodegen@^1.11.1:
+ version "1.14.3"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503"
+ integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==
dependencies:
- esprima "^3.1.3"
+ esprima "^4.0.1"
estraverse "^4.2.0"
esutils "^2.0.2"
optionator "^0.8.1"
optionalDependencies:
source-map "~0.6.1"
-eslint-plugin-eslint-comments@^3.1.1:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.1.2.tgz#4ef6c488dbe06aa1627fea107b3e5d059fc8a395"
- integrity sha512-QexaqrNeteFfRTad96W+Vi4Zj1KFbkHHNMMaHZEYcovKav6gdomyGzaxSDSL3GoIyUOo078wRAdYlu1caiauIQ==
+eslint-config-prettier@^6.10.1:
+ version "6.15.0"
+ resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz#7f93f6cb7d45a92f1537a70ecc06366e1ac6fed9"
+ integrity sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==
+ dependencies:
+ get-stdin "^6.0.0"
+
+eslint-plugin-eslint-comments@^3.1.2:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz#9e1cd7b4413526abb313933071d7aba05ca12ffa"
+ integrity sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==
dependencies:
escape-string-regexp "^1.0.5"
ignore "^5.0.5"
@@ -2219,84 +2730,79 @@ eslint-plugin-jest@22.4.1:
resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-22.4.1.tgz#a5fd6f7a2a41388d16f527073b778013c5189a9c"
integrity sha512-gcLfn6P2PrFAVx3AobaOzlIEevpAEf9chTpFZz7bYfc7pz8XRv7vuKTIE4hxPKZSha6XWKKplDQ0x9Pq8xX2mg==
-eslint-plugin-prettier@2.6.2:
- version "2.6.2"
- resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.2.tgz#71998c60aedfa2141f7bfcbf9d1c459bf98b4fad"
- integrity sha512-tGek5clmW5swrAx1mdPYM8oThrBE83ePh7LeseZHBWfHVGrHPhKn7Y5zgRMbU/9D5Td9K4CEmUPjGxA7iw98Og==
+eslint-plugin-prettier@3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.2.tgz#432e5a667666ab84ce72f945c72f77d996a5c9ba"
+ integrity sha512-GlolCC9y3XZfv3RQfwGew7NnuFDKsfI4lbvRK+PIIo23SFH+LemGs4cKwzAaRa+Mdb+lQO/STaIayno8T5sJJA==
dependencies:
- fast-diff "^1.1.1"
- jest-docblock "^21.0.0"
+ prettier-linter-helpers "^1.0.0"
-eslint-plugin-react-hooks@^1.5.1:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz#6210b6d5a37205f0b92858f895a4e827020a7d04"
- integrity sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA==
+eslint-plugin-react-hooks@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-3.0.0.tgz#9e80c71846eb68dd29c3b21d832728aa66e5bd35"
+ integrity sha512-EjxTHxjLKIBWFgDJdhKKzLh5q+vjTFrqNZX36uIxWS4OfyXe5DawqPj3U5qeJ1ngLwatjzQnmR0Lz0J0YH3kxw==
eslint-plugin-react-native-globals@^0.1.1:
version "0.1.2"
resolved "https://registry.yarnpkg.com/eslint-plugin-react-native-globals/-/eslint-plugin-react-native-globals-0.1.2.tgz#ee1348bc2ceb912303ce6bdbd22e2f045ea86ea2"
integrity sha512-9aEPf1JEpiTjcFAmmyw8eiIXmcNZOqaZyHO77wgm0/dWfT/oxC1SrIq8ET38pMxHYrcB6Uew+TzUVsBeczF88g==
-eslint-plugin-react-native@3.6.0:
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/eslint-plugin-react-native/-/eslint-plugin-react-native-3.6.0.tgz#7cad3b7c6159df6d26fe3252c6c5417a17f27b4b"
- integrity sha512-BEQcHZ06hZSBYWFVuNEq0xuui5VEsWpHDsZGBtfadHfCRqRMUrkYPgdDb3bpc60qShHE83kqIv59uKdinEg91Q==
+eslint-plugin-react-native@3.8.1:
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react-native/-/eslint-plugin-react-native-3.8.1.tgz#92811e37191ecb0d29c0f0a0c9e5c943ee573821"
+ integrity sha512-6Z4s4nvgFRdda/1s1+uu4a6EMZwEjjJ9Bk/1yBImv0fd9U2CsGu2cUakAtV83cZKhizbWhSouXoaK4JtlScdFg==
dependencies:
eslint-plugin-react-native-globals "^0.1.1"
-eslint-plugin-react@7.12.4:
- version "7.12.4"
- resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.12.4.tgz#b1ecf26479d61aee650da612e425c53a99f48c8c"
- integrity sha512-1puHJkXJY+oS1t467MjbqjvX53uQ05HXwjqDgdbGBqf5j9eeydI54G3KwiJmWciQ0HTBacIKw2jgwSBSH3yfgQ==
+eslint-plugin-react@7.19.0:
+ version "7.19.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.19.0.tgz#6d08f9673628aa69c5559d33489e855d83551666"
+ integrity sha512-SPT8j72CGuAP+JFbT0sJHOB80TX/pu44gQ4vXH/cq+hQTiY2PuZ6IHkqXJV6x1b28GDdo1lbInjKUrrdUf0LOQ==
dependencies:
- array-includes "^3.0.3"
+ array-includes "^3.1.1"
doctrine "^2.1.0"
has "^1.0.3"
- jsx-ast-utils "^2.0.1"
- object.fromentries "^2.0.0"
- prop-types "^15.6.2"
- resolve "^1.9.0"
-
-eslint-scope@3.7.1:
- version "3.7.1"
- resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8"
- integrity sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=
- dependencies:
- esrecurse "^4.1.0"
- estraverse "^4.1.1"
-
-eslint-scope@^4.0.0:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
- integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==
- dependencies:
- esrecurse "^4.1.0"
- estraverse "^4.1.1"
+ jsx-ast-utils "^2.2.3"
+ object.entries "^1.1.1"
+ object.fromentries "^2.0.2"
+ object.values "^1.1.1"
+ prop-types "^15.7.2"
+ resolve "^1.15.1"
+ semver "^6.3.0"
+ string.prototype.matchall "^4.0.2"
+ xregexp "^4.3.0"
eslint-scope@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9"
- integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
+ integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
dependencies:
- esrecurse "^4.1.0"
+ esrecurse "^4.3.0"
estraverse "^4.1.1"
-eslint-utils@^1.3.1, eslint-utils@^1.4.2:
- version "1.4.2"
- resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.2.tgz#166a5180ef6ab7eb462f162fd0e6f2463d7309ab"
- integrity sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==
+eslint-utils@^1.4.3:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f"
+ integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==
dependencies:
- eslint-visitor-keys "^1.0.0"
+ eslint-visitor-keys "^1.1.0"
+
+eslint-utils@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
+ integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
+ dependencies:
+ eslint-visitor-keys "^1.1.0"
eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2"
- integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
+ integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
-eslint@^6.4.0:
- version "6.4.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.4.0.tgz#5aa9227c3fbe921982b2eda94ba0d7fae858611a"
- integrity sha512-WTVEzK3lSFoXUovDHEbkJqCVPEPwbhCq4trDktNI6ygs7aO41d4cDT0JFAT5MivzZeVLWlg7vHL+bgrQv/t3vA==
+eslint@^6.5.1:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb"
+ integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==
dependencies:
"@babel/code-frame" "^7.0.0"
ajv "^6.10.0"
@@ -2305,19 +2811,19 @@ eslint@^6.4.0:
debug "^4.0.1"
doctrine "^3.0.0"
eslint-scope "^5.0.0"
- eslint-utils "^1.4.2"
+ eslint-utils "^1.4.3"
eslint-visitor-keys "^1.1.0"
- espree "^6.1.1"
+ espree "^6.1.2"
esquery "^1.0.1"
esutils "^2.0.2"
file-entry-cache "^5.0.1"
functional-red-black-tree "^1.0.1"
glob-parent "^5.0.0"
- globals "^11.7.0"
+ globals "^12.1.0"
ignore "^4.0.6"
import-fresh "^3.0.0"
imurmurhash "^0.1.4"
- inquirer "^6.4.1"
+ inquirer "^7.0.0"
is-glob "^4.0.0"
js-yaml "^3.13.1"
json-stable-stringify-without-jsonify "^1.0.1"
@@ -2326,7 +2832,7 @@ eslint@^6.4.0:
minimatch "^3.0.4"
mkdirp "^0.5.1"
natural-compare "^1.4.0"
- optionator "^0.8.2"
+ optionator "^0.8.3"
progress "^2.0.0"
regexpp "^2.0.1"
semver "^6.1.2"
@@ -2336,52 +2842,48 @@ eslint@^6.4.0:
text-table "^0.2.0"
v8-compile-cache "^2.0.3"
-espree@^6.1.1:
- version "6.1.1"
- resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.1.tgz#7f80e5f7257fc47db450022d723e356daeb1e5de"
- integrity sha512-EYbr8XZUhWbYCqQRW0duU5LxzL5bETN6AjKBGy1302qqzPaCH10QbRg3Wvco79Z8x9WbiE8HYB4e75xl6qUYvQ==
+espree@^6.1.2:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a"
+ integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==
dependencies:
- acorn "^7.0.0"
- acorn-jsx "^5.0.2"
+ acorn "^7.1.1"
+ acorn-jsx "^5.2.0"
eslint-visitor-keys "^1.1.0"
-esprima@^3.1.3:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
- integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=
-
-esprima@^4.0.0:
+esprima@^4.0.0, esprima@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
esquery@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708"
- integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5"
+ integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==
dependencies:
- estraverse "^4.0.0"
+ estraverse "^5.1.0"
-esrecurse@^4.1.0:
- version "4.2.1"
- resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
- integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==
+esrecurse@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
+ integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
dependencies:
- estraverse "^4.1.0"
+ estraverse "^5.2.0"
-estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1:
+estraverse@^4.1.1, estraverse@^4.2.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
-estraverse@^4.2.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
- integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=
+estraverse@^5.1.0, estraverse@^5.2.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
+ integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
-esutils@^2.0.0, esutils@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
+esutils@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+ integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
etag@~1.8.1:
version "1.8.1"
@@ -2399,22 +2901,9 @@ eventemitter3@^3.0.0:
integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==
exec-sh@^0.3.2:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b"
- integrity sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg==
-
-execa@^0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
- integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=
- dependencies:
- cross-spawn "^5.0.1"
- get-stream "^3.0.0"
- is-stream "^1.1.0"
- npm-run-path "^2.0.0"
- p-finally "^1.0.0"
- signal-exit "^3.0.0"
- strip-eof "^1.0.0"
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc"
+ integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==
execa@^1.0.0:
version "1.0.0"
@@ -2429,6 +2918,22 @@ execa@^1.0.0:
signal-exit "^3.0.0"
strip-eof "^1.0.0"
+execa@^3.2.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89"
+ integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==
+ dependencies:
+ cross-spawn "^7.0.0"
+ get-stream "^5.0.0"
+ human-signals "^1.1.1"
+ is-stream "^2.0.0"
+ merge-stream "^2.0.0"
+ npm-run-path "^4.0.0"
+ onetime "^5.1.0"
+ p-finally "^2.0.0"
+ signal-exit "^3.0.2"
+ strip-final-newline "^2.0.0"
+
exit@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
@@ -2447,17 +2952,17 @@ expand-brackets@^2.1.4:
snapdragon "^0.8.1"
to-regex "^3.0.1"
-expect@^24.9.0:
- version "24.9.0"
- resolved "https://registry.yarnpkg.com/expect/-/expect-24.9.0.tgz#b75165b4817074fa4a157794f46fe9f1ba15b6ca"
- integrity sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==
+expect@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/expect/-/expect-25.5.0.tgz#f07f848712a2813bb59167da3fb828ca21f58bba"
+ integrity sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA==
dependencies:
- "@jest/types" "^24.9.0"
- ansi-styles "^3.2.0"
- jest-get-type "^24.9.0"
- jest-matcher-utils "^24.9.0"
- jest-message-util "^24.9.0"
- jest-regex-util "^24.9.0"
+ "@jest/types" "^25.5.0"
+ ansi-styles "^4.0.0"
+ jest-get-type "^25.2.6"
+ jest-matcher-utils "^25.5.0"
+ jest-message-util "^25.5.0"
+ jest-regex-util "^25.2.6"
extend-shallow@^1.1.2:
version "1.1.4"
@@ -2469,6 +2974,7 @@ extend-shallow@^1.1.2:
extend-shallow@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
dependencies:
is-extendable "^0.1.0"
@@ -2517,9 +3023,15 @@ extglob@^2.0.4:
snapdragon "^0.8.1"
to-regex "^3.0.1"
-extsprintf@1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550"
+extsprintf@1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+ integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
+
+extsprintf@^1.2.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07"
+ integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==
fancy-log@^1.3.2:
version "1.3.3"
@@ -2531,31 +3043,32 @@ fancy-log@^1.3.2:
parse-node-version "^1.0.0"
time-stamp "^1.0.0"
-fast-deep-equal@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
- integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
+fast-deep-equal@^3.1.1:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+ integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
-fast-diff@^1.1.1:
+fast-diff@^1.1.2:
version "1.2.0"
resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03"
integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==
fast-json-stable-stringify@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
- integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+ integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
-fast-levenshtein@~2.0.4:
+fast-levenshtein@~2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+ integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
fb-watchman@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58"
- integrity sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85"
+ integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==
dependencies:
- bser "^2.0.0"
+ bser "2.1.1"
fbjs-css-vars@^1.0.0:
version "1.0.2"
@@ -2578,19 +3091,6 @@ fbjs-scripts@^1.1.0:
semver "^5.1.0"
through2 "^2.0.0"
-fbjs@^0.8.9:
- version "0.8.17"
- resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd"
- integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=
- dependencies:
- core-js "^1.0.0"
- isomorphic-fetch "^2.1.1"
- loose-envify "^1.0.0"
- object-assign "^4.1.0"
- promise "^7.1.1"
- setimmediate "^1.0.5"
- ua-parser-js "^0.7.18"
-
fbjs@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-1.0.0.tgz#52c215e0883a3c86af2a7a776ed51525ae8e0a5a"
@@ -2612,6 +3112,13 @@ figures@^2.0.0:
dependencies:
escape-string-regexp "^1.0.5"
+figures@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
+ integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==
+ dependencies:
+ escape-string-regexp "^1.0.5"
+
file-entry-cache@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c"
@@ -2619,6 +3126,11 @@ file-entry-cache@^5.0.1:
dependencies:
flat-cache "^2.0.1"
+file-uri-to-path@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
+ integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
+
fill-range@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
@@ -2629,6 +3141,13 @@ fill-range@^4.0.0:
repeat-string "^1.6.1"
to-regex-range "^2.1.0"
+fill-range@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+ integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+ dependencies:
+ to-regex-range "^5.0.1"
+
finalhandler@1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
@@ -2642,6 +3161,14 @@ finalhandler@1.1.2:
statuses "~1.5.0"
unpipe "~1.0.0"
+find-babel-config@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.2.0.tgz#a9b7b317eb5b9860cda9d54740a8c8337a2283a2"
+ integrity sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==
+ dependencies:
+ json5 "^0.5.1"
+ path-exists "^3.0.0"
+
find-cache-dir@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7"
@@ -2651,13 +3178,6 @@ find-cache-dir@^2.0.0:
make-dir "^2.0.0"
pkg-dir "^3.0.0"
-find-up@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
- integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
- dependencies:
- locate-path "^2.0.0"
-
find-up@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
@@ -2665,6 +3185,14 @@ find-up@^3.0.0:
dependencies:
locate-path "^3.0.0"
+find-up@^4.0.0, find-up@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
+ integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
+ dependencies:
+ locate-path "^5.0.0"
+ path-exists "^4.0.0"
+
flat-cache@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0"
@@ -2675,17 +3203,19 @@ flat-cache@^2.0.1:
write "1.0.3"
flatted@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08"
- integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138"
+ integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==
for-in@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+ integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
forever-agent@~0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+ integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
form-data@~2.3.2:
version "2.3.3"
@@ -2717,33 +3247,32 @@ fs-extra@^1.0.0:
jsonfile "^2.1.0"
klaw "^1.0.0"
-fs-extra@^7.0.1:
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9"
- integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==
+fs-extra@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
+ integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
dependencies:
- graceful-fs "^4.1.2"
+ graceful-fs "^4.2.0"
jsonfile "^4.0.0"
universalify "^0.1.0"
-fs-minipass@^1.2.5:
- version "1.2.6"
- resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07"
- integrity sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==
- dependencies:
- minipass "^2.2.1"
-
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
fsevents@^1.2.7:
- version "1.2.9"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f"
- integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==
+ version "1.2.13"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38"
+ integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==
dependencies:
+ bindings "^1.5.0"
nan "^2.12.1"
- node-pre-gyp "^0.12.0"
+
+fsevents@^2.1.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
+ integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
function-bind@^1.1.1:
version "1.1.1"
@@ -2755,33 +3284,34 @@ functional-red-black-tree@^1.0.1:
resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
-gauge@~2.7.3:
- version "2.7.4"
- resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
- integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
- dependencies:
- aproba "^1.0.3"
- console-control-strings "^1.0.0"
- has-unicode "^2.0.0"
- object-assign "^4.1.0"
- signal-exit "^3.0.0"
- string-width "^1.0.1"
- strip-ansi "^3.0.1"
- wide-align "^1.1.0"
-
-get-caller-file@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5"
+gensync@^1.0.0-beta.2:
+ version "1.0.0-beta.2"
+ resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
+ integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
get-caller-file@^2.0.1:
version "2.0.5"
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
-get-stream@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
- integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=
+get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6"
+ integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==
+ dependencies:
+ function-bind "^1.1.1"
+ has "^1.0.3"
+ has-symbols "^1.0.1"
+
+get-package-type@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
+ integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==
+
+get-stdin@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b"
+ integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==
get-stream@^4.0.0:
version "4.1.0"
@@ -2790,39 +3320,44 @@ get-stream@^4.0.0:
dependencies:
pump "^3.0.0"
+get-stream@^5.0.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
+ integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
+ dependencies:
+ pump "^3.0.0"
+
+get-symbol-description@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6"
+ integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==
+ dependencies:
+ call-bind "^1.0.2"
+ get-intrinsic "^1.1.1"
+
get-value@^2.0.3, get-value@^2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
getpass@^0.1.1:
- version "0.1.6"
- resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6"
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+ integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
dependencies:
assert-plus "^1.0.0"
glob-parent@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.0.0.tgz#1dc99f0f39b006d3e92c2c284068382f0c20e954"
- integrity sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+ integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
dependencies:
is-glob "^4.0.1"
-glob@^7.0.5:
- version "7.1.1"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
- dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^3.0.2"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-glob@^7.1.1, glob@^7.1.2, glob@^7.1.3:
- version "7.1.4"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255"
- integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==
+glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"
+ integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
@@ -2831,69 +3366,67 @@ glob@^7.1.1, glob@^7.1.2, glob@^7.1.3:
once "^1.3.0"
path-is-absolute "^1.0.0"
-global@^4.3.0:
- version "4.3.1"
- resolved "https://registry.yarnpkg.com/global/-/global-4.3.1.tgz#5f757908c7cbabce54f386ae440e11e26b7916df"
- dependencies:
- min-document "^2.19.0"
- process "~0.5.1"
-
-globals@^11.1.0, globals@^11.7.0:
+globals@^11.1.0:
version "11.12.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
-graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
- version "4.1.11"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
+globals@^12.1.0:
+ version "12.4.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8"
+ integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==
+ dependencies:
+ type-fest "^0.8.1"
-graceful-fs@^4.1.15:
- version "4.2.2"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02"
- integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==
+graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.4:
+ version "4.2.9"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96"
+ integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==
growly@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=
-handlebars@^4.1.2:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.2.0.tgz#57ce8d2175b9bbb3d8b3cf3e4217b1aec8ddcb2e"
- integrity sha512-Kb4xn5Qh1cxAKvQnzNWZ512DhABzyFNmsaJf3OAkWNa4NkaqWcNI8Tao8Tasi0/F4JD9oyG0YxuFyvyR57d+Gw==
- dependencies:
- neo-async "^2.6.0"
- optimist "^0.6.1"
- source-map "^0.6.1"
- optionalDependencies:
- uglify-js "^3.1.4"
-
har-schema@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
-har-validator@~5.1.0:
- version "5.1.3"
- resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080"
- integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==
+har-validator@~5.1.3:
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd"
+ integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==
dependencies:
- ajv "^6.5.5"
+ ajv "^6.12.3"
har-schema "^2.0.0"
+has-bigints@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113"
+ integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==
+
has-flag@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
-has-symbols@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44"
- integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=
+has-flag@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
-has-unicode@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+has-symbols@^1.0.1, has-symbols@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423"
+ integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==
+
+has-tostringtag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25"
+ integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==
+ dependencies:
+ has-symbols "^1.0.2"
has-value@^0.3.1:
version "0.3.1"
@@ -2926,21 +3459,29 @@ has-values@^1.0.0:
is-number "^3.0.0"
kind-of "^4.0.0"
-has@^1.0.1, has@^1.0.3:
+has@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
dependencies:
function-bind "^1.1.1"
-hermesvm@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/hermesvm/-/hermesvm-0.1.1.tgz#bd1df92b4dc504e261c23df34864daf24b844d03"
- integrity sha512-EosSDeUqTTGvlc9vQiy5Y/9GBlucEyo6lYuxg/FnukHCD/CP3NYeDAGV54TyZ19FgSqMEoPgOH9cyxvv8epQ1g==
+hermes-engine@~0.5.0:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/hermes-engine/-/hermes-engine-0.5.1.tgz#601115e4b1e0a17d9aa91243b96277de4e926e09"
+ integrity sha512-hLwqh8dejHayjlpvZY40e1aDCDvyP98cWx/L5DhAjSJLH8g4z9Tp08D7y4+3vErDsncPOdf1bxm+zUWpx0/Fxg==
+
+hermes-profile-transformer@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/hermes-profile-transformer/-/hermes-profile-transformer-0.0.6.tgz#bd0f5ecceda80dd0ddaae443469ab26fb38fc27b"
+ integrity sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ==
+ dependencies:
+ source-map "^0.7.3"
hosted-git-info@^2.1.4:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.2.0.tgz#7a0d097863d886c0fabbdcd37bf1758d8becf8a5"
+ version "2.8.9"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
+ integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==
html-encoding-sniffer@^1.0.2:
version "1.0.2"
@@ -2949,16 +3490,21 @@ html-encoding-sniffer@^1.0.2:
dependencies:
whatwg-encoding "^1.0.1"
-http-errors@~1.7.2:
- version "1.7.2"
- resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f"
- integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==
+html-escaper@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
+ integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
+
+http-errors@1.8.1:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c"
+ integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==
dependencies:
depd "~1.1.2"
- inherits "2.0.3"
- setprototypeof "1.1.1"
+ inherits "2.0.4"
+ setprototypeof "1.2.0"
statuses ">= 1.5.0 < 2"
- toidentifier "1.0.0"
+ toidentifier "1.0.1"
http-signature@~1.2.0:
version "1.2.0"
@@ -2969,23 +3515,24 @@ http-signature@~1.2.0:
jsprim "^1.2.2"
sshpk "^1.7.0"
-iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@^0.4.4:
+human-signals@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
+ integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==
+
+iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
dependencies:
safer-buffer ">= 2.1.2 < 3"
-iconv-lite@~0.4.13:
- version "0.4.15"
- resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb"
-
-ignore-walk@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8"
- integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==
+iconv-lite@^0.6.2:
+ version "0.6.3"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
+ integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
dependencies:
- minimatch "^3.0.4"
+ safer-buffer ">= 2.1.2 < 3.0.0"
ignore@^4.0.6:
version "4.0.6"
@@ -2993,9 +3540,9 @@ ignore@^4.0.6:
integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
ignore@^5.0.5:
- version "5.1.4"
- resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf"
- integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a"
+ integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==
image-size@^0.6.0:
version "0.6.3"
@@ -3011,45 +3558,39 @@ import-fresh@^2.0.0:
resolve-from "^3.0.0"
import-fresh@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.1.0.tgz#6d33fa1dcef6df930fae003446f33415af905118"
- integrity sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
+ integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
dependencies:
parent-module "^1.0.0"
resolve-from "^4.0.0"
-import-local@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d"
- integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==
+import-local@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4"
+ integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==
dependencies:
- pkg-dir "^3.0.0"
- resolve-cwd "^2.0.0"
+ pkg-dir "^4.2.0"
+ resolve-cwd "^3.0.0"
imurmurhash@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+ integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
inflight@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
dependencies:
once "^1.3.0"
wrappy "1"
-inherits@2, inherits@2.0.3, inherits@^2.0.3, inherits@~2.0.1:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
-
-inherits@~2.0.3:
+inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@~2.0.3:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
-ini@~1.3.0:
- version "1.3.4"
- resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
-
inquirer@^3.0.6:
version "3.3.0"
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9"
@@ -3070,40 +3611,55 @@ inquirer@^3.0.6:
strip-ansi "^4.0.0"
through "^2.3.6"
-inquirer@^6.4.1:
- version "6.5.2"
- resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca"
- integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==
+inquirer@^7.0.0:
+ version "7.3.3"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003"
+ integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==
dependencies:
- ansi-escapes "^3.2.0"
- chalk "^2.4.2"
- cli-cursor "^2.1.0"
- cli-width "^2.0.0"
+ ansi-escapes "^4.2.1"
+ chalk "^4.1.0"
+ cli-cursor "^3.1.0"
+ cli-width "^3.0.0"
external-editor "^3.0.3"
- figures "^2.0.0"
- lodash "^4.17.12"
- mute-stream "0.0.7"
- run-async "^2.2.0"
- rxjs "^6.4.0"
- string-width "^2.1.0"
- strip-ansi "^5.1.0"
+ figures "^3.0.0"
+ lodash "^4.17.19"
+ mute-stream "0.0.8"
+ run-async "^2.4.0"
+ rxjs "^6.6.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
through "^2.3.6"
-invariant@^2.2.4:
+internal-slot@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c"
+ integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==
+ dependencies:
+ get-intrinsic "^1.1.0"
+ has "^1.0.3"
+ side-channel "^1.0.4"
+
+interpret@^1.0.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e"
+ integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==
+
+invariant@*, invariant@^2.2.4:
version "2.2.4"
resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
dependencies:
loose-envify "^1.0.0"
-invert-kv@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
+ip-regex@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9"
+ integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=
-invert-kv@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02"
- integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==
+ip@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
+ integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=
is-accessor-descriptor@^0.1.6:
version "0.1.6"
@@ -3122,26 +3678,32 @@ is-accessor-descriptor@^1.0.0:
is-arrayish@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
-is-buffer@^1.0.2:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b"
+is-bigint@^1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3"
+ integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==
+ dependencies:
+ has-bigints "^1.0.1"
+
+is-boolean-object@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719"
+ integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==
+ dependencies:
+ call-bind "^1.0.2"
+ has-tostringtag "^1.0.0"
is-buffer@^1.1.5:
version "1.1.6"
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
-is-builtin-module@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
- dependencies:
- builtin-modules "^1.0.0"
-
-is-callable@^1.1.4:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75"
- integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==
+is-callable@^1.1.4, is-callable@^1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945"
+ integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==
is-ci@^2.0.0:
version "2.0.0"
@@ -3150,6 +3712,13 @@ is-ci@^2.0.0:
dependencies:
ci-info "^2.0.0"
+is-core-module@^2.8.1:
+ version "2.8.1"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211"
+ integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==
+ dependencies:
+ has "^1.0.3"
+
is-data-descriptor@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
@@ -3165,9 +3734,11 @@ is-data-descriptor@^1.0.0:
kind-of "^6.0.0"
is-date-object@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
- integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f"
+ integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==
+ dependencies:
+ has-tostringtag "^1.0.0"
is-descriptor@^0.1.0:
version "0.1.6"
@@ -3192,9 +3763,15 @@ is-directory@^0.3.1:
resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=
+is-docker@^2.0.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
+ integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
+
is-extendable@^0.1.0, is-extendable@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
is-extendable@^1.0.1:
version "1.0.1"
@@ -3208,29 +3785,40 @@ is-extglob@^2.1.1:
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
-is-fullwidth-code-point@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
- dependencies:
- number-is-nan "^1.0.0"
-
is-fullwidth-code-point@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
+is-fullwidth-code-point@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
is-generator-fn@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==
is-glob@^4.0.0, is-glob@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
- integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
+ integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
dependencies:
is-extglob "^2.1.1"
+is-negative-zero@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150"
+ integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==
+
+is-number-object@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0"
+ integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==
+ dependencies:
+ has-tostringtag "^1.0.0"
+
is-number@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
@@ -3238,38 +3826,66 @@ is-number@^3.0.0:
dependencies:
kind-of "^3.0.2"
-is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4:
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-plain-object@^2.0.3, is-plain-object@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
dependencies:
isobject "^3.0.1"
-is-promise@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
-
-is-regex@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
- integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=
+is-regex@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
+ integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==
dependencies:
- has "^1.0.1"
+ call-bind "^1.0.2"
+ has-tostringtag "^1.0.0"
+
+is-shared-array-buffer@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6"
+ integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==
is-stream@^1.0.1, is-stream@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+ integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
-is-symbol@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38"
- integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==
+is-stream@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
+ integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
+
+is-string@^1.0.5, is-string@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
+ integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==
dependencies:
- has-symbols "^1.0.0"
+ has-tostringtag "^1.0.0"
-is-typedarray@~1.0.0:
+is-symbol@^1.0.2, is-symbol@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c"
+ integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==
+ dependencies:
+ has-symbols "^1.0.2"
+
+is-typedarray@^1.0.0, is-typedarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+ integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
+
+is-weakref@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
+ integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==
+ dependencies:
+ call-bind "^1.0.2"
is-windows@^1.0.2:
version "1.0.2"
@@ -3281,13 +3897,17 @@ is-wsl@^1.1.0:
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=
+is-wsl@^2.1.1:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
+ integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
+ dependencies:
+ is-docker "^2.0.0"
+
isarray@1.0.0, isarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
-
-isexe@^1.1.1:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0"
+ integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
isexe@^2.0.0:
version "2.0.0"
@@ -3297,6 +3917,7 @@ isexe@^2.0.0:
isobject@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
dependencies:
isarray "1.0.0"
@@ -3308,6 +3929,7 @@ isobject@^3.0.0, isobject@^3.0.1:
isomorphic-fetch@^2.1.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
+ integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=
dependencies:
node-fetch "^1.0.1"
whatwg-fetch ">=0.10.0"
@@ -3315,165 +3937,177 @@ isomorphic-fetch@^2.1.1:
isstream@~0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+ integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
-istanbul-lib-coverage@^2.0.2, istanbul-lib-coverage@^2.0.5:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49"
- integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==
+istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3"
+ integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==
-istanbul-lib-instrument@^3.0.1, istanbul-lib-instrument@^3.3.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630"
- integrity sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==
+istanbul-lib-instrument@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d"
+ integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==
dependencies:
- "@babel/generator" "^7.4.0"
- "@babel/parser" "^7.4.3"
- "@babel/template" "^7.4.0"
- "@babel/traverse" "^7.4.3"
- "@babel/types" "^7.4.0"
- istanbul-lib-coverage "^2.0.5"
- semver "^6.0.0"
+ "@babel/core" "^7.7.5"
+ "@istanbuljs/schema" "^0.1.2"
+ istanbul-lib-coverage "^3.0.0"
+ semver "^6.3.0"
-istanbul-lib-report@^2.0.4:
- version "2.0.8"
- resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33"
- integrity sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==
+istanbul-lib-instrument@^5.0.4:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz#7b49198b657b27a730b8e9cb601f1e1bff24c59a"
+ integrity sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==
dependencies:
- istanbul-lib-coverage "^2.0.5"
- make-dir "^2.1.0"
- supports-color "^6.1.0"
+ "@babel/core" "^7.12.3"
+ "@babel/parser" "^7.14.7"
+ "@istanbuljs/schema" "^0.1.2"
+ istanbul-lib-coverage "^3.2.0"
+ semver "^6.3.0"
-istanbul-lib-source-maps@^3.0.1:
- version "3.0.6"
- resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8"
- integrity sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==
+istanbul-lib-report@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6"
+ integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==
+ dependencies:
+ istanbul-lib-coverage "^3.0.0"
+ make-dir "^3.0.0"
+ supports-color "^7.1.0"
+
+istanbul-lib-source-maps@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551"
+ integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==
dependencies:
debug "^4.1.1"
- istanbul-lib-coverage "^2.0.5"
- make-dir "^2.1.0"
- rimraf "^2.6.3"
+ istanbul-lib-coverage "^3.0.0"
source-map "^0.6.1"
-istanbul-reports@^2.2.6:
- version "2.2.6"
- resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.6.tgz#7b4f2660d82b29303a8fe6091f8ca4bf058da1af"
- integrity sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==
+istanbul-reports@^3.0.2:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.3.tgz#4bcae3103b94518117930d51283690960b50d3c2"
+ integrity sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg==
dependencies:
- handlebars "^4.1.2"
+ html-escaper "^2.0.0"
+ istanbul-lib-report "^3.0.0"
-jest-changed-files@^24.9.0:
- version "24.9.0"
- resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.9.0.tgz#08d8c15eb79a7fa3fc98269bc14b451ee82f8039"
- integrity sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==
+jest-changed-files@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-25.5.0.tgz#141cc23567ceb3f534526f8614ba39421383634c"
+ integrity sha512-EOw9QEqapsDT7mKF162m8HFzRPbmP8qJQny6ldVOdOVBz3ACgPm/1nAn5fPQ/NDaYhX/AHkrGwwkCncpAVSXcw==
dependencies:
- "@jest/types" "^24.9.0"
- execa "^1.0.0"
- throat "^4.0.0"
+ "@jest/types" "^25.5.0"
+ execa "^3.2.0"
+ throat "^5.0.0"
-jest-cli@^24.9.0:
- version "24.9.0"
- resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.9.0.tgz#ad2de62d07472d419c6abc301fc432b98b10d2af"
- integrity sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==
+jest-cli@^25.5.4:
+ version "25.5.4"
+ resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-25.5.4.tgz#b9f1a84d1301a92c5c217684cb79840831db9f0d"
+ integrity sha512-rG8uJkIiOUpnREh1768/N3n27Cm+xPFkSNFO91tgg+8o2rXeVLStz+vkXkGr4UtzH6t1SNbjwoiswd7p4AhHTw==
dependencies:
- "@jest/core" "^24.9.0"
- "@jest/test-result" "^24.9.0"
- "@jest/types" "^24.9.0"
- chalk "^2.0.1"
+ "@jest/core" "^25.5.4"
+ "@jest/test-result" "^25.5.0"
+ "@jest/types" "^25.5.0"
+ chalk "^3.0.0"
exit "^0.1.2"
- import-local "^2.0.0"
+ graceful-fs "^4.2.4"
+ import-local "^3.0.2"
is-ci "^2.0.0"
- jest-config "^24.9.0"
- jest-util "^24.9.0"
- jest-validate "^24.9.0"
+ jest-config "^25.5.4"
+ jest-util "^25.5.0"
+ jest-validate "^25.5.0"
prompts "^2.0.1"
- realpath-native "^1.1.0"
- yargs "^13.3.0"
+ realpath-native "^2.0.0"
+ yargs "^15.3.1"
-jest-config@^24.9.0:
- version "24.9.0"
- resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.9.0.tgz#fb1bbc60c73a46af03590719efa4825e6e4dd1b5"
- integrity sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==
+jest-config@^25.5.4:
+ version "25.5.4"
+ resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-25.5.4.tgz#38e2057b3f976ef7309b2b2c8dcd2a708a67f02c"
+ integrity sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg==
dependencies:
"@babel/core" "^7.1.0"
- "@jest/test-sequencer" "^24.9.0"
- "@jest/types" "^24.9.0"
- babel-jest "^24.9.0"
- chalk "^2.0.1"
+ "@jest/test-sequencer" "^25.5.4"
+ "@jest/types" "^25.5.0"
+ babel-jest "^25.5.1"
+ chalk "^3.0.0"
+ deepmerge "^4.2.2"
glob "^7.1.1"
- jest-environment-jsdom "^24.9.0"
- jest-environment-node "^24.9.0"
- jest-get-type "^24.9.0"
- jest-jasmine2 "^24.9.0"
- jest-regex-util "^24.3.0"
- jest-resolve "^24.9.0"
- jest-util "^24.9.0"
- jest-validate "^24.9.0"
- micromatch "^3.1.10"
- pretty-format "^24.9.0"
- realpath-native "^1.1.0"
+ graceful-fs "^4.2.4"
+ jest-environment-jsdom "^25.5.0"
+ jest-environment-node "^25.5.0"
+ jest-get-type "^25.2.6"
+ jest-jasmine2 "^25.5.4"
+ jest-regex-util "^25.2.6"
+ jest-resolve "^25.5.1"
+ jest-util "^25.5.0"
+ jest-validate "^25.5.0"
+ micromatch "^4.0.2"
+ pretty-format "^25.5.0"
+ realpath-native "^2.0.0"
-jest-diff@^24.9.0:
- version "24.9.0"
- resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da"
- integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==
+jest-diff@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9"
+ integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==
dependencies:
- chalk "^2.0.1"
- diff-sequences "^24.9.0"
- jest-get-type "^24.9.0"
- pretty-format "^24.9.0"
+ chalk "^3.0.0"
+ diff-sequences "^25.2.6"
+ jest-get-type "^25.2.6"
+ pretty-format "^25.5.0"
-jest-docblock@^21.0.0:
- version "21.2.0"
- resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414"
- integrity sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw==
-
-jest-docblock@^24.3.0:
- version "24.9.0"
- resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.9.0.tgz#7970201802ba560e1c4092cc25cbedf5af5a8ce2"
- integrity sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==
+jest-docblock@^25.3.0:
+ version "25.3.0"
+ resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-25.3.0.tgz#8b777a27e3477cd77a168c05290c471a575623ef"
+ integrity sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg==
dependencies:
- detect-newline "^2.1.0"
+ detect-newline "^3.0.0"
-jest-each@^24.9.0:
- version "24.9.0"
- resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.9.0.tgz#eb2da602e2a610898dbc5f1f6df3ba86b55f8b05"
- integrity sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==
+jest-each@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-25.5.0.tgz#0c3c2797e8225cb7bec7e4d249dcd96b934be516"
+ integrity sha512-QBogUxna3D8vtiItvn54xXde7+vuzqRrEeaw8r1s+1TG9eZLVJE5ZkKoSUlqFwRjnlaA4hyKGiu9OlkFIuKnjA==
dependencies:
- "@jest/types" "^24.9.0"
- chalk "^2.0.1"
- jest-get-type "^24.9.0"
- jest-util "^24.9.0"
- pretty-format "^24.9.0"
+ "@jest/types" "^25.5.0"
+ chalk "^3.0.0"
+ jest-get-type "^25.2.6"
+ jest-util "^25.5.0"
+ pretty-format "^25.5.0"
-jest-environment-jsdom@^24.9.0:
- version "24.9.0"
- resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz#4b0806c7fc94f95edb369a69cc2778eec2b7375b"
- integrity sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==
+jest-environment-jsdom@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-25.5.0.tgz#dcbe4da2ea997707997040ecf6e2560aec4e9834"
+ integrity sha512-7Jr02ydaq4jaWMZLY+Skn8wL5nVIYpWvmeatOHL3tOcV3Zw8sjnPpx+ZdeBfc457p8jCR9J6YCc+Lga0oIy62A==
dependencies:
- "@jest/environment" "^24.9.0"
- "@jest/fake-timers" "^24.9.0"
- "@jest/types" "^24.9.0"
- jest-mock "^24.9.0"
- jest-util "^24.9.0"
- jsdom "^11.5.1"
+ "@jest/environment" "^25.5.0"
+ "@jest/fake-timers" "^25.5.0"
+ "@jest/types" "^25.5.0"
+ jest-mock "^25.5.0"
+ jest-util "^25.5.0"
+ jsdom "^15.2.1"
-jest-environment-node@^24.9.0:
- version "24.9.0"
- resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.9.0.tgz#333d2d2796f9687f2aeebf0742b519f33c1cbfd3"
- integrity sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==
+jest-environment-node@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-25.5.0.tgz#0f55270d94804902988e64adca37c6ce0f7d07a1"
+ integrity sha512-iuxK6rQR2En9EID+2k+IBs5fCFd919gVVK5BeND82fYeLWPqvRcFNPKu9+gxTwfB5XwBGBvZ0HFQa+cHtIoslA==
dependencies:
- "@jest/environment" "^24.9.0"
- "@jest/fake-timers" "^24.9.0"
- "@jest/types" "^24.9.0"
- jest-mock "^24.9.0"
- jest-util "^24.9.0"
+ "@jest/environment" "^25.5.0"
+ "@jest/fake-timers" "^25.5.0"
+ "@jest/types" "^25.5.0"
+ jest-mock "^25.5.0"
+ jest-util "^25.5.0"
+ semver "^6.3.0"
jest-get-type@^24.9.0:
version "24.9.0"
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e"
integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==
-jest-haste-map@^24.7.1, jest-haste-map@^24.9.0:
+jest-get-type@^25.2.6:
+ version "25.2.6"
+ resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877"
+ integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==
+
+jest-haste-map@^24.9.0:
version "24.9.0"
resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d"
integrity sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==
@@ -3492,45 +4126,66 @@ jest-haste-map@^24.7.1, jest-haste-map@^24.9.0:
optionalDependencies:
fsevents "^1.2.7"
-jest-jasmine2@^24.9.0:
- version "24.9.0"
- resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz#1f7b1bd3242c1774e62acabb3646d96afc3be6a0"
- integrity sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==
+jest-haste-map@^25.5.1:
+ version "25.5.1"
+ resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-25.5.1.tgz#1df10f716c1d94e60a1ebf7798c9fb3da2620943"
+ integrity sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ==
+ dependencies:
+ "@jest/types" "^25.5.0"
+ "@types/graceful-fs" "^4.1.2"
+ anymatch "^3.0.3"
+ fb-watchman "^2.0.0"
+ graceful-fs "^4.2.4"
+ jest-serializer "^25.5.0"
+ jest-util "^25.5.0"
+ jest-worker "^25.5.0"
+ micromatch "^4.0.2"
+ sane "^4.0.3"
+ walker "^1.0.7"
+ which "^2.0.2"
+ optionalDependencies:
+ fsevents "^2.1.2"
+
+jest-jasmine2@^25.5.4:
+ version "25.5.4"
+ resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-25.5.4.tgz#66ca8b328fb1a3c5364816f8958f6970a8526968"
+ integrity sha512-9acbWEfbmS8UpdcfqnDO+uBUgKa/9hcRh983IHdM+pKmJPL77G0sWAAK0V0kr5LK3a8cSBfkFSoncXwQlRZfkQ==
dependencies:
"@babel/traverse" "^7.1.0"
- "@jest/environment" "^24.9.0"
- "@jest/test-result" "^24.9.0"
- "@jest/types" "^24.9.0"
- chalk "^2.0.1"
+ "@jest/environment" "^25.5.0"
+ "@jest/source-map" "^25.5.0"
+ "@jest/test-result" "^25.5.0"
+ "@jest/types" "^25.5.0"
+ chalk "^3.0.0"
co "^4.6.0"
- expect "^24.9.0"
+ expect "^25.5.0"
is-generator-fn "^2.0.0"
- jest-each "^24.9.0"
- jest-matcher-utils "^24.9.0"
- jest-message-util "^24.9.0"
- jest-runtime "^24.9.0"
- jest-snapshot "^24.9.0"
- jest-util "^24.9.0"
- pretty-format "^24.9.0"
- throat "^4.0.0"
+ jest-each "^25.5.0"
+ jest-matcher-utils "^25.5.0"
+ jest-message-util "^25.5.0"
+ jest-runtime "^25.5.4"
+ jest-snapshot "^25.5.1"
+ jest-util "^25.5.0"
+ pretty-format "^25.5.0"
+ throat "^5.0.0"
-jest-leak-detector@^24.9.0:
- version "24.9.0"
- resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz#b665dea7c77100c5c4f7dfcb153b65cf07dcf96a"
- integrity sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==
+jest-leak-detector@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-25.5.0.tgz#2291c6294b0ce404241bb56fe60e2d0c3e34f0bb"
+ integrity sha512-rV7JdLsanS8OkdDpZtgBf61L5xZ4NnYLBq72r6ldxahJWWczZjXawRsoHyXzibM5ed7C2QRjpp6ypgwGdKyoVA==
dependencies:
- jest-get-type "^24.9.0"
- pretty-format "^24.9.0"
+ jest-get-type "^25.2.6"
+ pretty-format "^25.5.0"
-jest-matcher-utils@^24.9.0:
- version "24.9.0"
- resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz#f5b3661d5e628dffe6dd65251dfdae0e87c3a073"
- integrity sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==
+jest-matcher-utils@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz#fbc98a12d730e5d2453d7f1ed4a4d948e34b7867"
+ integrity sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw==
dependencies:
- chalk "^2.0.1"
- jest-diff "^24.9.0"
- jest-get-type "^24.9.0"
- pretty-format "^24.9.0"
+ chalk "^3.0.0"
+ jest-diff "^25.5.0"
+ jest-get-type "^25.2.6"
+ pretty-format "^25.5.0"
jest-message-util@^24.9.0:
version "24.9.0"
@@ -3546,6 +4201,20 @@ jest-message-util@^24.9.0:
slash "^2.0.0"
stack-utils "^1.0.1"
+jest-message-util@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-25.5.0.tgz#ea11d93204cc7ae97456e1d8716251185b8880ea"
+ integrity sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@jest/types" "^25.5.0"
+ "@types/stack-utils" "^1.0.1"
+ chalk "^3.0.0"
+ graceful-fs "^4.2.4"
+ micromatch "^4.0.2"
+ slash "^3.0.0"
+ stack-utils "^1.0.1"
+
jest-mock@^24.9.0:
version "24.9.0"
resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.9.0.tgz#c22835541ee379b908673ad51087a2185c13f1c6"
@@ -3553,113 +4222,136 @@ jest-mock@^24.9.0:
dependencies:
"@jest/types" "^24.9.0"
+jest-mock@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-25.5.0.tgz#a91a54dabd14e37ecd61665d6b6e06360a55387a"
+ integrity sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA==
+ dependencies:
+ "@jest/types" "^25.5.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"
- integrity sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c"
+ integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==
-jest-regex-util@^24.3.0, jest-regex-util@^24.9.0:
- version "24.9.0"
- resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.9.0.tgz#c13fb3380bde22bf6575432c493ea8fe37965636"
- integrity sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==
+jest-regex-util@^25.2.6:
+ version "25.2.6"
+ resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-25.2.6.tgz#d847d38ba15d2118d3b06390056028d0f2fd3964"
+ integrity sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw==
-jest-resolve-dependencies@^24.9.0:
- version "24.9.0"
- resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz#ad055198959c4cfba8a4f066c673a3f0786507ab"
- integrity sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==
+jest-resolve-dependencies@^25.5.4:
+ version "25.5.4"
+ resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-25.5.4.tgz#85501f53957c8e3be446e863a74777b5a17397a7"
+ integrity sha512-yFmbPd+DAQjJQg88HveObcGBA32nqNZ02fjYmtL16t1xw9bAttSn5UGRRhzMHIQbsep7znWvAvnD4kDqOFM0Uw==
dependencies:
- "@jest/types" "^24.9.0"
- jest-regex-util "^24.3.0"
- jest-snapshot "^24.9.0"
+ "@jest/types" "^25.5.0"
+ jest-regex-util "^25.2.6"
+ jest-snapshot "^25.5.1"
-jest-resolve@^24.9.0:
- version "24.9.0"
- resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.9.0.tgz#dff04c7687af34c4dd7e524892d9cf77e5d17321"
- integrity sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==
+jest-resolve@^25.5.1:
+ version "25.5.1"
+ resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-25.5.1.tgz#0e6fbcfa7c26d2a5fe8f456088dc332a79266829"
+ integrity sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ==
dependencies:
- "@jest/types" "^24.9.0"
+ "@jest/types" "^25.5.0"
browser-resolve "^1.11.3"
- chalk "^2.0.1"
+ chalk "^3.0.0"
+ graceful-fs "^4.2.4"
jest-pnp-resolver "^1.2.1"
- realpath-native "^1.1.0"
+ read-pkg-up "^7.0.1"
+ realpath-native "^2.0.0"
+ resolve "^1.17.0"
+ slash "^3.0.0"
-jest-runner@^24.9.0:
- version "24.9.0"
- resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.9.0.tgz#574fafdbd54455c2b34b4bdf4365a23857fcdf42"
- integrity sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==
+jest-runner@^25.5.4:
+ version "25.5.4"
+ resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-25.5.4.tgz#ffec5df3875da5f5c878ae6d0a17b8e4ecd7c71d"
+ integrity sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg==
dependencies:
- "@jest/console" "^24.7.1"
- "@jest/environment" "^24.9.0"
- "@jest/test-result" "^24.9.0"
- "@jest/types" "^24.9.0"
- chalk "^2.4.2"
+ "@jest/console" "^25.5.0"
+ "@jest/environment" "^25.5.0"
+ "@jest/test-result" "^25.5.0"
+ "@jest/types" "^25.5.0"
+ chalk "^3.0.0"
exit "^0.1.2"
- graceful-fs "^4.1.15"
- jest-config "^24.9.0"
- jest-docblock "^24.3.0"
- jest-haste-map "^24.9.0"
- jest-jasmine2 "^24.9.0"
- jest-leak-detector "^24.9.0"
- jest-message-util "^24.9.0"
- jest-resolve "^24.9.0"
- jest-runtime "^24.9.0"
- jest-util "^24.9.0"
- jest-worker "^24.6.0"
+ graceful-fs "^4.2.4"
+ jest-config "^25.5.4"
+ jest-docblock "^25.3.0"
+ jest-haste-map "^25.5.1"
+ jest-jasmine2 "^25.5.4"
+ jest-leak-detector "^25.5.0"
+ jest-message-util "^25.5.0"
+ jest-resolve "^25.5.1"
+ jest-runtime "^25.5.4"
+ jest-util "^25.5.0"
+ jest-worker "^25.5.0"
source-map-support "^0.5.6"
- throat "^4.0.0"
+ throat "^5.0.0"
-jest-runtime@^24.9.0:
- version "24.9.0"
- resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.9.0.tgz#9f14583af6a4f7314a6a9d9f0226e1a781c8e4ac"
- integrity sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==
+jest-runtime@^25.5.4:
+ version "25.5.4"
+ resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-25.5.4.tgz#dc981fe2cb2137abcd319e74ccae7f7eeffbfaab"
+ integrity sha512-RWTt8LeWh3GvjYtASH2eezkc8AehVoWKK20udV6n3/gC87wlTbE1kIA+opCvNWyyPeBs6ptYsc6nyHUb1GlUVQ==
dependencies:
- "@jest/console" "^24.7.1"
- "@jest/environment" "^24.9.0"
- "@jest/source-map" "^24.3.0"
- "@jest/transform" "^24.9.0"
- "@jest/types" "^24.9.0"
- "@types/yargs" "^13.0.0"
- chalk "^2.0.1"
+ "@jest/console" "^25.5.0"
+ "@jest/environment" "^25.5.0"
+ "@jest/globals" "^25.5.2"
+ "@jest/source-map" "^25.5.0"
+ "@jest/test-result" "^25.5.0"
+ "@jest/transform" "^25.5.1"
+ "@jest/types" "^25.5.0"
+ "@types/yargs" "^15.0.0"
+ chalk "^3.0.0"
+ collect-v8-coverage "^1.0.0"
exit "^0.1.2"
glob "^7.1.3"
- graceful-fs "^4.1.15"
- jest-config "^24.9.0"
- jest-haste-map "^24.9.0"
- jest-message-util "^24.9.0"
- jest-mock "^24.9.0"
- jest-regex-util "^24.3.0"
- jest-resolve "^24.9.0"
- jest-snapshot "^24.9.0"
- jest-util "^24.9.0"
- jest-validate "^24.9.0"
- realpath-native "^1.1.0"
- slash "^2.0.0"
- strip-bom "^3.0.0"
- yargs "^13.3.0"
+ graceful-fs "^4.2.4"
+ jest-config "^25.5.4"
+ jest-haste-map "^25.5.1"
+ jest-message-util "^25.5.0"
+ jest-mock "^25.5.0"
+ jest-regex-util "^25.2.6"
+ jest-resolve "^25.5.1"
+ jest-snapshot "^25.5.1"
+ jest-util "^25.5.0"
+ jest-validate "^25.5.0"
+ realpath-native "^2.0.0"
+ slash "^3.0.0"
+ strip-bom "^4.0.0"
+ yargs "^15.3.1"
-jest-serializer@^24.4.0, jest-serializer@^24.9.0:
+jest-serializer@^24.9.0:
version "24.9.0"
resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73"
integrity sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==
-jest-snapshot@^24.9.0:
- version "24.9.0"
- resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.9.0.tgz#ec8e9ca4f2ec0c5c87ae8f925cf97497b0e951ba"
- integrity sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==
+jest-serializer@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-25.5.0.tgz#a993f484e769b4ed54e70e0efdb74007f503072b"
+ integrity sha512-LxD8fY1lByomEPflwur9o4e2a5twSQ7TaVNLlFUuToIdoJuBt8tzHfCsZ42Ok6LkKXWzFWf3AGmheuLAA7LcCA==
+ dependencies:
+ graceful-fs "^4.2.4"
+
+jest-snapshot@^25.5.1:
+ version "25.5.1"
+ resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-25.5.1.tgz#1a2a576491f9961eb8d00c2e5fd479bc28e5ff7f"
+ integrity sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ==
dependencies:
"@babel/types" "^7.0.0"
- "@jest/types" "^24.9.0"
- chalk "^2.0.1"
- expect "^24.9.0"
- jest-diff "^24.9.0"
- jest-get-type "^24.9.0"
- jest-matcher-utils "^24.9.0"
- jest-message-util "^24.9.0"
- jest-resolve "^24.9.0"
- mkdirp "^0.5.1"
+ "@jest/types" "^25.5.0"
+ "@types/prettier" "^1.19.0"
+ chalk "^3.0.0"
+ expect "^25.5.0"
+ graceful-fs "^4.2.4"
+ jest-diff "^25.5.0"
+ jest-get-type "^25.2.6"
+ jest-matcher-utils "^25.5.0"
+ jest-message-util "^25.5.0"
+ jest-resolve "^25.5.1"
+ make-dir "^3.0.0"
natural-compare "^1.4.0"
- pretty-format "^24.9.0"
- semver "^6.2.0"
+ pretty-format "^25.5.0"
+ semver "^6.3.0"
jest-util@^24.9.0:
version "24.9.0"
@@ -3679,7 +4371,18 @@ jest-util@^24.9.0:
slash "^2.0.0"
source-map "^0.6.0"
-jest-validate@^24.7.0, jest-validate@^24.9.0:
+jest-util@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-25.5.0.tgz#31c63b5d6e901274d264a4fec849230aa3fa35b0"
+ integrity sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA==
+ dependencies:
+ "@jest/types" "^25.5.0"
+ chalk "^3.0.0"
+ graceful-fs "^4.2.4"
+ is-ci "^2.0.0"
+ make-dir "^3.0.0"
+
+jest-validate@^24.9.0:
version "24.9.0"
resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.9.0.tgz#0775c55360d173cd854e40180756d4ff52def8ab"
integrity sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==
@@ -3691,20 +4394,31 @@ jest-validate@^24.7.0, jest-validate@^24.9.0:
leven "^3.1.0"
pretty-format "^24.9.0"
-jest-watcher@^24.9.0:
- version "24.9.0"
- resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-24.9.0.tgz#4b56e5d1ceff005f5b88e528dc9afc8dd4ed2b3b"
- integrity sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==
+jest-validate@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-25.5.0.tgz#fb4c93f332c2e4cf70151a628e58a35e459a413a"
+ integrity sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ==
dependencies:
- "@jest/test-result" "^24.9.0"
- "@jest/types" "^24.9.0"
- "@types/yargs" "^13.0.0"
- ansi-escapes "^3.0.0"
- chalk "^2.0.1"
- jest-util "^24.9.0"
- string-length "^2.0.0"
+ "@jest/types" "^25.5.0"
+ camelcase "^5.3.1"
+ chalk "^3.0.0"
+ jest-get-type "^25.2.6"
+ leven "^3.1.0"
+ pretty-format "^25.5.0"
-jest-worker@^24.6.0, jest-worker@^24.9.0:
+jest-watcher@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-25.5.0.tgz#d6110d101df98badebe435003956fd4a465e8456"
+ integrity sha512-XrSfJnVASEl+5+bb51V0Q7WQx65dTSk7NL4yDdVjPnRNpM0hG+ncFmDYJo9O8jaSRcAitVbuVawyXCRoxGrT5Q==
+ dependencies:
+ "@jest/test-result" "^25.5.0"
+ "@jest/types" "^25.5.0"
+ ansi-escapes "^4.2.1"
+ chalk "^3.0.0"
+ jest-util "^25.5.0"
+ string-length "^3.1.0"
+
+jest-worker@^24.9.0:
version "24.9.0"
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5"
integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==
@@ -3712,28 +4426,27 @@ jest-worker@^24.6.0, jest-worker@^24.9.0:
merge-stream "^2.0.0"
supports-color "^6.1.0"
-jest@^24.9.0:
- version "24.9.0"
- resolved "https://registry.yarnpkg.com/jest/-/jest-24.9.0.tgz#987d290c05a08b52c56188c1002e368edb007171"
- integrity sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==
+jest-worker@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1"
+ integrity sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==
dependencies:
- import-local "^2.0.0"
- jest-cli "^24.9.0"
+ merge-stream "^2.0.0"
+ supports-color "^7.0.0"
+
+jest@^25.1.0:
+ version "25.5.4"
+ resolved "https://registry.yarnpkg.com/jest/-/jest-25.5.4.tgz#f21107b6489cfe32b076ce2adcadee3587acb9db"
+ integrity sha512-hHFJROBTqZahnO+X+PMtT6G2/ztqAZJveGqz//FnWWHurizkD05PQGzRZOhF3XP6z7SJmL+5tCfW8qV06JypwQ==
+ dependencies:
+ "@jest/core" "^25.5.4"
+ import-local "^3.0.2"
+ jest-cli "^25.5.4"
jetifier@^1.6.2:
- version "1.6.4"
- resolved "https://registry.yarnpkg.com/jetifier/-/jetifier-1.6.4.tgz#6159db8e275d97980d26162897a0648b6d4a3222"
- integrity sha512-+f/4OLeqY8RAmXnonI1ffeY1DR8kMNJPhv5WMFehchf7U71cjMQVKkOz1n6asz6kfVoAqKNWJz1A/18i18AcXA==
-
-jodid25519@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967"
- dependencies:
- jsbn "~0.1.0"
-
-js-tokens@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7"
+ version "1.6.8"
+ resolved "https://registry.yarnpkg.com/jetifier/-/jetifier-1.6.8.tgz#e88068697875cbda98c32472902c4d3756247798"
+ integrity sha512-3Zi16h6L5tXDRQJTb221cnRoVG9/9OvreLdLU2/ZjRv/GILL+2Cemt0IKvkowwkDpvouAU1DQPOJ7qaiHeIdrw==
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0"
@@ -3741,9 +4454,9 @@ js-tokens@^3.0.0:
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
js-yaml@^3.13.1:
- version "3.13.1"
- resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
- integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
+ version "3.14.1"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
+ integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
dependencies:
argparse "^1.0.7"
esprima "^4.0.0"
@@ -3751,42 +4464,43 @@ js-yaml@^3.13.1:
jsbn@~0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+ integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
-jsc-android@245459.0.0:
+jsc-android@^245459.0.0:
version "245459.0.0"
resolved "https://registry.yarnpkg.com/jsc-android/-/jsc-android-245459.0.0.tgz#e584258dd0b04c9159a27fb104cd5d491fd202c9"
integrity sha512-wkjURqwaB1daNkDi2OYYbsLnIdC/lUM2nPXQKRs5pqEU9chDg435bjvo+LSaHotDENygHQDHe+ntUkkw2gwMtg==
-jsdom@^11.5.1:
- version "11.12.0"
- resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8"
- integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==
+jsdom@^15.2.1:
+ version "15.2.1"
+ resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-15.2.1.tgz#d2feb1aef7183f86be521b8c6833ff5296d07ec5"
+ integrity sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g==
dependencies:
abab "^2.0.0"
- acorn "^5.5.3"
- acorn-globals "^4.1.0"
+ acorn "^7.1.0"
+ acorn-globals "^4.3.2"
array-equal "^1.0.0"
- cssom ">= 0.3.2 < 0.4.0"
- cssstyle "^1.0.0"
- data-urls "^1.0.0"
+ cssom "^0.4.1"
+ cssstyle "^2.0.0"
+ data-urls "^1.1.0"
domexception "^1.0.1"
- escodegen "^1.9.1"
+ escodegen "^1.11.1"
html-encoding-sniffer "^1.0.2"
- left-pad "^1.3.0"
- nwsapi "^2.0.7"
- parse5 "4.0.0"
+ nwsapi "^2.2.0"
+ parse5 "5.1.0"
pn "^1.1.0"
- request "^2.87.0"
- request-promise-native "^1.0.5"
- sax "^1.2.4"
+ request "^2.88.0"
+ request-promise-native "^1.0.7"
+ saxes "^3.1.9"
symbol-tree "^3.2.2"
- tough-cookie "^2.3.4"
+ tough-cookie "^3.0.1"
w3c-hr-time "^1.0.1"
+ w3c-xmlserializer "^1.1.2"
webidl-conversions "^4.0.2"
- whatwg-encoding "^1.0.3"
- whatwg-mimetype "^2.1.0"
- whatwg-url "^6.4.1"
- ws "^5.2.0"
+ whatwg-encoding "^1.0.5"
+ whatwg-mimetype "^2.3.0"
+ whatwg-url "^7.0.0"
+ ws "^7.0.0"
xml-name-validator "^3.0.0"
jsesc@^2.5.1:
@@ -3797,20 +4511,27 @@ jsesc@^2.5.1:
jsesc@~0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
+ integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
json-parse-better-errors@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
+json-parse-even-better-errors@^2.3.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
+ integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
+
json-schema-traverse@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
-json-schema@0.2.3:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+json-schema@0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5"
+ integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==
json-stable-stringify-without-jsonify@^1.0.1:
version "1.0.1"
@@ -3820,23 +4541,31 @@ json-stable-stringify-without-jsonify@^1.0.1:
json-stable-stringify@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
+ integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=
dependencies:
jsonify "~0.0.0"
json-stringify-safe@~5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+ integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
-json5@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850"
- integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==
+json5@^0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
+ integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
+
+json5@^2.1.2:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3"
+ integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==
dependencies:
- minimist "^1.2.0"
+ minimist "^1.2.5"
jsonfile@^2.1.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"
+ integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug=
optionalDependencies:
graceful-fs "^4.1.6"
@@ -3850,21 +4579,24 @@ jsonfile@^4.0.0:
jsonify@~0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
+ integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=
jsprim@^1.2.2:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252"
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb"
+ integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==
dependencies:
- extsprintf "1.0.2"
- json-schema "0.2.3"
- verror "1.3.6"
+ assert-plus "1.0.0"
+ extsprintf "1.3.0"
+ json-schema "0.4.0"
+ verror "1.10.0"
-jsx-ast-utils@^2.0.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.2.1.tgz#4d4973ebf8b9d2837ee91a8208cc66f3a2776cfb"
- integrity sha512-v3FxCcAf20DayI+uxnCuw795+oOIkVu6EnJ1+kSzhqqTZHNkTZ7B66ZgLp4oLJ/gbA64cI0B7WRoHZMSRdyVRQ==
+jsx-ast-utils@^2.2.3:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz#1114a4c1209481db06c690c2b4f488cc665f657e"
+ integrity sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==
dependencies:
- array-includes "^3.0.3"
+ array-includes "^3.1.1"
object.assign "^4.1.0"
keymirror@^0.1.1:
@@ -3877,13 +4609,7 @@ kind-of@^1.1.0:
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-1.1.0.tgz#140a3d2d41a36d2efcfa9377b62c24f8495a5c44"
integrity sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=
-kind-of@^3.0.2:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47"
- dependencies:
- is-buffer "^1.0.2"
-
-kind-of@^3.0.3, kind-of@^3.2.0:
+kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
version "3.2.2"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
@@ -3903,13 +4629,14 @@ kind-of@^5.0.0:
integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
kind-of@^6.0.0, kind-of@^6.0.2:
- version "6.0.2"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
- integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
+ integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
klaw@^1.0.0:
version "1.3.1"
resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
+ integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk=
optionalDependencies:
graceful-fs "^4.1.9"
@@ -3918,24 +4645,6 @@ kleur@^3.0.3:
resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
-lcid@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
- dependencies:
- invert-kv "^1.0.0"
-
-lcid@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf"
- integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==
- dependencies:
- invert-kv "^2.0.0"
-
-left-pad@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e"
- integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==
-
leven@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
@@ -3949,33 +4658,10 @@ levn@^0.3.0, levn@~0.3.0:
prelude-ls "~1.1.2"
type-check "~0.3.2"
-load-json-file@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
- integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=
- dependencies:
- graceful-fs "^4.1.2"
- parse-json "^2.2.0"
- pify "^2.0.0"
- strip-bom "^3.0.0"
-
-load-json-file@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
- integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs=
- dependencies:
- graceful-fs "^4.1.2"
- parse-json "^4.0.0"
- pify "^3.0.0"
- strip-bom "^3.0.0"
-
-locate-path@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
- integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
- dependencies:
- p-locate "^2.0.0"
- path-exists "^3.0.0"
+lines-and-columns@^1.1.6:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
+ integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
locate-path@^3.0.0:
version "3.0.0"
@@ -3985,6 +4671,18 @@ locate-path@^3.0.0:
p-locate "^3.0.0"
path-exists "^3.0.0"
+locate-path@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
+ integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
+ dependencies:
+ p-locate "^4.1.0"
+
+lodash.debounce@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
+ integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168=
+
lodash.sortby@^4.7.0:
version "4.7.0"
resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
@@ -3995,24 +4693,10 @@ lodash.throttle@^4.1.1:
resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4"
integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=
-lodash.unescape@4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c"
- integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=
-
-lodash@^4.17.10, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14:
- version "4.17.15"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
- integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
-
-lodash@^4.17.11, lodash@^4.17.5:
- version "4.17.11"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
- integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
-
-lodash@^4.3.0, lodash@^4.6.1:
- version "4.17.4"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
+lodash@^4.17.10, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.3.0:
+ version "4.17.21"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+ integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
log-symbols@^2.2.0:
version "2.2.0"
@@ -4021,22 +4705,23 @@ log-symbols@^2.2.0:
dependencies:
chalk "^2.0.1"
-logkitty@^0.6.0:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/logkitty/-/logkitty-0.6.1.tgz#fe29209669d261539cbd6bb998a136fc92a1a05c"
- integrity sha512-cHuXN8qUZuzX/7kB6VyS7kB4xyD24e8gyHXIFNhIv+fjW3P+jEXNUhj0o/7qWJtv7UZpbnPgUqzu/AZQ8RAqxQ==
+logkitty@^0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/logkitty/-/logkitty-0.7.1.tgz#8e8d62f4085a826e8d38987722570234e33c6aa7"
+ integrity sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==
dependencies:
ansi-fragments "^0.2.1"
dayjs "^1.8.15"
- yargs "^12.0.5"
+ yargs "^15.1.0"
-loose-envify@^1.0.0, loose-envify@^1.1.0:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
+lolex@^5.0.0:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367"
+ integrity sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==
dependencies:
- js-tokens "^3.0.0"
+ "@sinonjs/commons" "^1.7.0"
-loose-envify@^1.3.1, loose-envify@^1.4.0:
+loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
@@ -4044,11 +4729,19 @@ loose-envify@^1.3.1, loose-envify@^1.4.0:
js-tokens "^3.0.0 || ^4.0.0"
lru-cache@^4.0.1:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e"
+ version "4.1.5"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
+ integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
dependencies:
- pseudomap "^1.0.1"
- yallist "^2.0.0"
+ pseudomap "^1.0.2"
+ yallist "^2.1.2"
+
+lru-cache@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
+ integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
+ dependencies:
+ yallist "^4.0.0"
make-dir@^2.0.0, make-dir@^2.1.0:
version "2.1.0"
@@ -4058,11 +4751,19 @@ make-dir@^2.0.0, make-dir@^2.1.0:
pify "^4.0.1"
semver "^5.6.0"
-makeerror@1.0.x:
- version "1.0.11"
- resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c"
+make-dir@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
+ integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
dependencies:
- tmpl "1.0.x"
+ semver "^6.0.0"
+
+makeerror@1.0.12:
+ version "1.0.12"
+ resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a"
+ integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==
+ dependencies:
+ tmpl "1.0.5"
map-age-cleaner@^0.1.1:
version "0.1.3"
@@ -4083,14 +4784,7 @@ map-visit@^1.0.0:
dependencies:
object-visit "^1.0.0"
-mem@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76"
- integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=
- dependencies:
- mimic-fn "^1.0.0"
-
-mem@^4.0.0:
+mem@^4.3.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178"
integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==
@@ -4111,92 +4805,80 @@ merge-stream@^2.0.0:
resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
-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"
- integrity sha512-j3VydgncUG8HP6AZala6GTIt3V01nptodnnOke3JMYLqgk8EJ1LOVOdotK9pXi80o7EmmNKFs/LyyH8z+uAJzQ==
+metro-babel-register@0.59.0:
+ version "0.59.0"
+ resolved "https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.59.0.tgz#2bcff65641b36794cf083ba732fbc46cf870fb43"
+ integrity sha512-JtWc29erdsXO/V3loenXKw+aHUXgj7lt0QPaZKPpctLLy8kcEpI/8pfXXgVK9weXICCpCnYtYncIosAyzh0xjg==
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-transformer@0.54.1:
- version "0.54.1"
- resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.54.1.tgz#371ffa2d1118b22cc9e40b3c3ea6738c49dae9dc"
- integrity sha512-2aiAnuYBdcLV1VINb8ENAA4keIaJIepHgR9+iRvIde+9GSjKnexqx4nNmJN392285gRDp1fVZ7uY0uQawK/A5g==
+metro-babel-transformer@0.59.0:
+ version "0.59.0"
+ resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.59.0.tgz#dda99c75d831b00142c42c020c51c103b29f199d"
+ integrity sha512-fdZJl8rs54GVFXokxRdD7ZrQ1TJjxWzOi/xSP25VR3E8tbm3nBZqS+/ylu643qSr/IueABR+jrlqAyACwGEf6w==
dependencies:
"@babel/core" "^7.0.0"
+ metro-source-map "0.59.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"
- integrity sha512-jWm5myuMoZAOhoPsa8ItfDxdTcOzKhTTzzhFlbZnRamE7i9qybeMdrZt8KHQpF7i2p/mKzE9Yhf4ouOz5K/jHg==
+metro-cache@0.59.0:
+ version "0.59.0"
+ resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.59.0.tgz#ef3c055f276933979b731455dc8317d7a66f0f2d"
+ integrity sha512-ryWNkSnpyADfRpHGb8BRhQ3+k8bdT/bsxMH2O0ntlZYZ188d8nnYWmxbRvFmEzToJxe/ol4uDw0tJFAaQsN8KA==
dependencies:
- "@babel/helper-module-imports" "^7.0.0"
-
-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.4.0"
- metro-core "0.54.1"
+ jest-serializer "^24.9.0"
+ metro-core "0.59.0"
mkdirp "^0.5.1"
rimraf "^2.5.4"
-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==
+metro-config@0.59.0, metro-config@^0.59.0:
+ version "0.59.0"
+ resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.59.0.tgz#9844e388069321dd7403e49f0d495a81f9aa0fef"
+ integrity sha512-MDsknFG9vZ4Nb5VR6OUDmGHaWz6oZg/FtE3up1zVBKPVRTXE1Z+k7zypnPtMXjMh3WHs/Sy4+wU1xnceE/zdnA==
dependencies:
cosmiconfig "^5.0.5"
- jest-validate "^24.7.0"
- metro "0.54.1"
- metro-cache "0.54.1"
- metro-core "0.54.1"
- pretty-format "^24.7.0"
+ jest-validate "^24.9.0"
+ metro "0.59.0"
+ metro-cache "0.59.0"
+ metro-core "0.59.0"
-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==
+metro-core@0.59.0, metro-core@^0.59.0:
+ version "0.59.0"
+ resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.59.0.tgz#958cde3fe5c8cd84a78e1899af801ad69e9c83b1"
+ integrity sha512-kb5LKvV5r2pqMEzGyTid8ai2mIjW13NMduQ8oBmfha7/EPTATcTQ//s+bkhAs1toQD8vqVvjAb0cPNjWQEmcmQ==
dependencies:
- jest-haste-map "^24.7.1"
+ jest-haste-map "^24.9.0"
lodash.throttle "^4.1.1"
- metro-resolver "0.54.1"
+ metro-resolver "0.59.0"
wordwrap "^1.0.0"
-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==
+metro-inspector-proxy@0.59.0:
+ version "0.59.0"
+ resolved "https://registry.yarnpkg.com/metro-inspector-proxy/-/metro-inspector-proxy-0.59.0.tgz#39d1390772d13767fc595be9a1a7074e2425cf8e"
+ integrity sha512-hPeAuQcofTOH0F+2GEZqWkvkVY1/skezSSlMocDQDaqds+Kw6JgdA7FlZXxnKmQ/jYrWUzff/pl8SUCDwuYthQ==
dependencies:
connect "^3.6.5"
debug "^2.2.0"
- rxjs "^5.4.3"
ws "^1.1.5"
- yargs "^9.0.0"
+ yargs "^14.2.0"
-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==
+metro-minify-uglify@0.59.0:
+ version "0.59.0"
+ resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.59.0.tgz#6491876308d878742f7b894d7fca4af356886dd5"
+ integrity sha512-7IzVgCVWZMymgZ/quieg/9v5EQ8QmZWAgDc86Zp9j0Vy6tQTjUn6jlU+YAKW3mfMEjMr6iIUzCD8YklX78tFAw==
dependencies:
uglify-es "^3.1.9"
-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"
- integrity sha512-Hfr32+u5yYl3qhYQJU8NQ26g4kQlc3yFMg7keVR/3H8rwBIbFqXgsKt8oe0dOrv7WvrMqBHhDtVdU9ls3sSq8g==
+metro-react-native-babel-preset@0.59.0, metro-react-native-babel-preset@^0.59.0:
+ version "0.59.0"
+ resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.59.0.tgz#20e020bc6ac9849e1477de1333d303ed42aba225"
+ integrity sha512-BoO6ncPfceIDReIH8pQ5tQptcGo5yRWQXJGVXfANbiKLq4tfgdZB1C1e2rMUJ6iypmeJU9dzl+EhPmIFKtgREg==
dependencies:
"@babel/plugin-proposal-class-properties" "^7.0.0"
"@babel/plugin-proposal-export-default-from" "^7.0.0"
@@ -4207,6 +4889,8 @@ metro-react-native-babel-preset@0.54.1:
"@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-syntax-nullish-coalescing-operator" "^7.0.0"
+ "@babel/plugin-syntax-optional-chaining" "^7.0.0"
"@babel/plugin-transform-arrow-functions" "^7.0.0"
"@babel/plugin-transform-block-scoping" "^7.0.0"
"@babel/plugin-transform-classes" "^7.0.0"
@@ -4222,6 +4906,7 @@ metro-react-native-babel-preset@0.54.1:
"@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-self" "^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"
@@ -4229,109 +4914,61 @@ metro-react-native-babel-preset@0.54.1:
"@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.54.1"
- react-transform-hmr "^1.0.4"
-
-metro-react-native-babel-preset@^0.56.0:
- version "0.56.0"
- resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.56.0.tgz#fa47dfd5f7678e89cffd1249020b8add6938fc48"
- integrity sha512-MAo1fm0dNn6MVZmylaz6k2HC1MINHLTLfE7O3a9Xz3fAtbGbApisp06rBUfK5uUqIJDmAaKgbiT34lHJSIiE6Q==
- 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-typescript" "^7.5.0"
"@babel/plugin-transform-unicode-regex" "^7.0.0"
"@babel/template" "^7.0.0"
react-refresh "^0.4.0"
-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==
+metro-react-native-babel-transformer@0.59.0, metro-react-native-babel-transformer@^0.59.0:
+ version "0.59.0"
+ resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.59.0.tgz#9b3dfd6ad35c6ef37fc4ce4d20a2eb67fabbb4be"
+ integrity sha512-1O3wrnMq4NcPQ1asEcl9lRDn/t+F1Oef6S9WaYVIKEhg9m/EQRGVrrTVP+R6B5Eeaj3+zNKbzM8Dx/NWy1hUbQ==
dependencies:
"@babel/core" "^7.0.0"
- babel-preset-fbjs "^3.1.2"
- metro-babel-transformer "0.54.1"
- metro-react-native-babel-preset "0.54.1"
+ babel-preset-fbjs "^3.3.0"
+ metro-babel-transformer "0.59.0"
+ metro-react-native-babel-preset "0.59.0"
+ metro-source-map "0.59.0"
-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==
+metro-resolver@0.59.0, metro-resolver@^0.59.0:
+ version "0.59.0"
+ resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.59.0.tgz#fbc9d7c95f094c52807877d0011feffb9e896fad"
+ integrity sha512-lbgiumnwoVosffEI96z0FGuq1ejTorHAj3QYUPmp5dFMfitRxLP7Wm/WP9l4ZZjIptxTExsJwuEff1SLRCPD9w==
dependencies:
absolute-path "^0.0.0"
-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-source-map@0.55.0, metro-source-map@^0.55.0:
- version "0.55.0"
- resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.55.0.tgz#1f6289905f08277c398f2b9b9c13e7e0e5a6f540"
- integrity sha512-HZODA0KPl5onJNGIztfTHHWurR2nL6Je/X8wwj+bL4ZBB/hSMVeDk7rWReCAvO3twVz7Ztp8Si0jfMmmH4Ruuw==
+metro-source-map@0.59.0:
+ version "0.59.0"
+ resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.59.0.tgz#e9beb9fc51bfb4e060f95820cf1508fc122d23f7"
+ integrity sha512-0w5CmCM+ybSqXIjqU4RiK40t4bvANL6lafabQ2GP2XD3vSwkLY+StWzCtsb4mPuyi9R/SgoLBel+ZOXHXAH0eQ==
dependencies:
"@babel/traverse" "^7.0.0"
"@babel/types" "^7.0.0"
invariant "^2.2.4"
- metro-symbolicate "0.55.0"
- ob1 "0.55.0"
+ metro-symbolicate "0.59.0"
+ ob1 "0.59.0"
source-map "^0.5.6"
vlq "^1.0.0"
-metro-symbolicate@0.55.0:
- version "0.55.0"
- resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.55.0.tgz#4086a2adae54b5e44a4911ca572d8a7b03c71fa1"
- integrity sha512-3r3Gpv5L4U7rBGpIqw5S1nun5MelfUMLRiScJsPRGZVTX3WY1w+zpaQKlWBi5yuHf5dMQ+ZUVbhb02IdrfJ2Fg==
+metro-symbolicate@0.59.0:
+ version "0.59.0"
+ resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.59.0.tgz#fc7f93957a42b02c2bfc57ed1e8f393f5f636a54"
+ integrity sha512-asLaF2A7rndrToGFIknL13aiohwPJ95RKHf0NM3hP/nipiLDoMzXT6ZnQvBqDxkUKyP+51AI75DMtb+Wcyw4Bw==
dependencies:
- metro-source-map "0.55.0"
+ invariant "^2.2.4"
+ metro-source-map "0.59.0"
source-map "^0.5.6"
through2 "^2.0.1"
vlq "^1.0.0"
-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==
+metro@0.59.0, metro@^0.59.0:
+ version "0.59.0"
+ resolved "https://registry.yarnpkg.com/metro/-/metro-0.59.0.tgz#64a87cd61357814a4f279518e0781b1eab5934b8"
+ integrity sha512-OpVgYXyuTvouusFZQJ/UYKEbwfLmialrSCUUTGTFaBor6UMUHZgXPYtK86LzesgMqRc8aiuTQVO78iKW2Iz3wg==
dependencies:
+ "@babel/code-frame" "^7.0.0"
"@babel/core" "^7.0.0"
- "@babel/generator" "^7.0.0"
+ "@babel/generator" "^7.5.0"
"@babel/parser" "^7.0.0"
"@babel/plugin-external-helpers" "^7.0.0"
"@babel/template" "^7.0.0"
@@ -4339,50 +4976,52 @@ metro@0.54.1, metro@^0.54.1:
"@babel/types" "^7.0.0"
absolute-path "^0.0.0"
async "^2.4.0"
- babel-preset-fbjs "^3.1.2"
+ babel-preset-fbjs "^3.3.0"
buffer-crc32 "^0.2.13"
chalk "^2.4.1"
+ ci-info "^2.0.0"
concat-stream "^1.6.0"
connect "^3.6.5"
debug "^2.2.0"
denodeify "^1.2.1"
+ error-stack-parser "^2.0.6"
eventemitter3 "^3.0.0"
fbjs "^1.0.0"
fs-extra "^1.0.0"
graceful-fs "^4.1.3"
image-size "^0.6.0"
invariant "^2.2.4"
- jest-haste-map "^24.7.1"
- jest-worker "^24.6.0"
+ jest-haste-map "^24.9.0"
+ jest-worker "^24.9.0"
json-stable-stringify "^1.0.1"
lodash.throttle "^4.1.1"
merge-stream "^1.0.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"
+ metro-babel-register "0.59.0"
+ metro-babel-transformer "0.59.0"
+ metro-cache "0.59.0"
+ metro-config "0.59.0"
+ metro-core "0.59.0"
+ metro-inspector-proxy "0.59.0"
+ metro-minify-uglify "0.59.0"
+ metro-react-native-babel-preset "0.59.0"
+ metro-resolver "0.59.0"
+ metro-source-map "0.59.0"
+ metro-symbolicate "0.59.0"
mime-types "2.1.11"
mkdirp "^0.5.1"
node-fetch "^2.2.0"
- nullthrows "^1.1.0"
- react-transform-hmr "^1.0.4"
+ nullthrows "^1.1.1"
resolve "^1.5.0"
rimraf "^2.5.4"
serialize-error "^2.1.0"
source-map "^0.5.6"
+ strip-ansi "^4.0.0"
temp "0.8.3"
throat "^4.1.0"
wordwrap "^1.0.0"
- write-file-atomic "^1.2.0"
ws "^1.1.5"
xpipe "^1.0.5"
- yargs "^9.0.0"
+ yargs "^14.2.0"
micromatch@^3.1.10, micromatch@^3.1.4:
version "3.1.10"
@@ -4403,37 +5042,37 @@ micromatch@^3.1.10, micromatch@^3.1.4:
snapdragon "^0.8.1"
to-regex "^3.0.2"
-mime-db@1.40.0, "mime-db@>= 1.40.0 < 2":
- version "1.40.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32"
- integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==
+micromatch@^4.0.2:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9"
+ integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==
+ dependencies:
+ braces "^3.0.1"
+ picomatch "^2.2.3"
+
+mime-db@1.51.0, "mime-db@>= 1.43.0 < 2":
+ version "1.51.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c"
+ integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==
mime-db@~1.23.0:
version "1.23.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.23.0.tgz#a31b4070adaea27d732ea333740a64d0ec9a6659"
-
-mime-db@~1.26.0:
- version "1.26.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.26.0.tgz#eaffcd0e4fc6935cf8134da246e2e6c35305adff"
+ integrity sha1-oxtAcK2uon1zLqMzdApk0OyaZlk=
mime-types@2.1.11:
version "2.1.11"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.11.tgz#c259c471bda808a85d6cd193b430a5fae4473b3c"
+ integrity sha1-wlnEcb2oCKhdbNGTtDCl+uRHOzw=
dependencies:
mime-db "~1.23.0"
-mime-types@^2.1.12:
- version "2.1.14"
- resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.14.tgz#f7ef7d97583fcaf3b7d282b6f8b5679dab1e94ee"
+mime-types@^2.1.12, mime-types@~2.1.19, mime-types@~2.1.24:
+ version "2.1.34"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24"
+ integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==
dependencies:
- mime-db "~1.26.0"
-
-mime-types@~2.1.19, mime-types@~2.1.24:
- version "2.1.24"
- resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81"
- integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==
- dependencies:
- mime-db "1.40.0"
+ mime-db "1.51.0"
mime@1.6.0:
version "1.6.0"
@@ -4441,32 +5080,20 @@ mime@1.6.0:
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
mime@^2.4.1:
- version "2.4.4"
- resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5"
- integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367"
+ integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==
mimic-fn@^1.0.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
-mimic-fn@^2.0.0:
+mimic-fn@^2.0.0, mimic-fn@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
-min-document@^2.19.0:
- version "2.19.0"
- resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685"
- dependencies:
- dom-walk "^0.1.0"
-
-minimatch@^3.0.2:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
- dependencies:
- brace-expansion "^1.0.0"
-
minimatch@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
@@ -4474,82 +5101,60 @@ minimatch@^3.0.4:
dependencies:
brace-expansion "^1.1.7"
-minimist@0.0.8, minimist@~0.0.1:
- version "0.0.8"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
-
-minimist@^1.1.1, minimist@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
-
-minipass@^2.2.1, minipass@^2.3.5:
- version "2.3.5"
- resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848"
- integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==
- dependencies:
- safe-buffer "^5.1.2"
- yallist "^3.0.0"
-
-minizlib@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614"
- integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==
- dependencies:
- minipass "^2.2.1"
+minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
+ integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
mixin-deep@^1.2.0:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe"
- integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
+ integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
dependencies:
for-in "^1.0.2"
is-extendable "^1.0.1"
-mkdirp@^0.5.0, mkdirp@^0.5.1:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+mkdirp@^0.5.1:
+ version "0.5.5"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
+ integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
dependencies:
- minimist "0.0.8"
-
-morgan@^1.9.0:
- version "1.9.1"
- resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.1.tgz#0a8d16734a1d9afbc824b99df87e738e58e2da59"
- integrity sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==
- dependencies:
- basic-auth "~2.0.0"
- debug "2.6.9"
- depd "~1.1.2"
- on-finished "~2.3.0"
- on-headers "~1.0.1"
-
-ms@0.7.2:
- version "0.7.2"
- resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765"
+ minimist "^1.2.5"
ms@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
-ms@2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
- integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
-
-ms@^2.1.1:
+ms@2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+ms@2.1.3:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
+ integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+
+mustache@^4.0.1:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64"
+ integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==
+
mute-stream@0.0.7:
version "0.0.7"
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
+mute-stream@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
+ integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
+
nan@^2.12.1:
- version "2.14.0"
- resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c"
- integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==
+ version "2.15.0"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee"
+ integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==
nanomatch@^1.2.9:
version "1.2.13"
@@ -4573,103 +5178,69 @@ natural-compare@^1.4.0:
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
-needle@^2.2.1:
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c"
- integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==
- dependencies:
- debug "^3.2.6"
- iconv-lite "^0.4.4"
- sax "^1.2.4"
-
negotiator@0.6.2:
version "0.6.2"
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
-neo-async@^2.6.0:
- version "2.6.1"
- resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c"
- integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==
-
nice-try@^1.0.4:
version "1.0.5"
resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
+nocache@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/nocache/-/nocache-2.1.0.tgz#120c9ffec43b5729b1d5de88cd71aa75a0ba491f"
+ integrity sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q==
+
node-fetch@^1.0.1:
- version "1.6.3"
- resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04"
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
+ integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==
dependencies:
encoding "^0.1.11"
is-stream "^1.0.1"
-node-fetch@^2.2.0, 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-fetch@^2.2.0, node-fetch@^2.6.0:
+ version "2.6.7"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
+ integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
+ dependencies:
+ whatwg-url "^5.0.0"
node-int64@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
+ integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=
-node-modules-regexp@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40"
- integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=
-
-node-notifier@^5.2.1:
- version "5.4.0"
- resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.0.tgz#7b455fdce9f7de0c63538297354f3db468426e6a"
- integrity sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ==
+node-notifier@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-6.0.0.tgz#cea319e06baa16deec8ce5cd7f133c4a46b68e12"
+ integrity sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw==
dependencies:
growly "^1.3.0"
- is-wsl "^1.1.0"
- semver "^5.5.0"
+ is-wsl "^2.1.1"
+ semver "^6.3.0"
shellwords "^0.1.1"
- which "^1.3.0"
+ which "^1.3.1"
-node-notifier@^5.4.2:
- version "5.4.3"
- resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.3.tgz#cb72daf94c93904098e28b9c590fd866e464bd50"
- integrity sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==
- dependencies:
- growly "^1.3.0"
- is-wsl "^1.1.0"
- semver "^5.5.0"
- shellwords "^0.1.1"
- which "^1.3.0"
+node-releases@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5"
+ integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==
-node-pre-gyp@^0.12.0:
- version "0.12.0"
- resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149"
- integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==
- dependencies:
- detect-libc "^1.0.2"
- mkdirp "^0.5.1"
- needle "^2.2.1"
- nopt "^4.0.1"
- npm-packlist "^1.1.6"
- npmlog "^4.0.2"
- rc "^1.2.7"
- rimraf "^2.6.1"
- semver "^5.3.0"
- tar "^4"
+node-stream-zip@^1.9.1:
+ version "1.15.0"
+ resolved "https://registry.yarnpkg.com/node-stream-zip/-/node-stream-zip-1.15.0.tgz#158adb88ed8004c6c49a396b50a6a5de3bca33ea"
+ integrity sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==
-nopt@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
- integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=
- dependencies:
- abbrev "1"
- osenv "^0.1.4"
-
-normalize-package-data@^2.3.2:
- version "2.3.6"
- resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.6.tgz#498fa420c96401f787402ba21e600def9f981fff"
+normalize-package-data@^2.5.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
+ integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
dependencies:
hosted-git-info "^2.1.4"
- is-builtin-module "^1.0.0"
+ resolve "^1.10.0"
semver "2 || 3 || 4 || 5"
validate-npm-package-license "^3.0.1"
@@ -4680,18 +5251,10 @@ normalize-path@^2.1.1:
dependencies:
remove-trailing-separator "^1.0.1"
-npm-bundled@^1.0.1:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd"
- integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==
-
-npm-packlist@^1.1.6:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc"
- integrity sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==
- dependencies:
- ignore-walk "^3.0.1"
- npm-bundled "^1.0.1"
+normalize-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
npm-run-path@^2.0.0:
version "2.0.2"
@@ -4700,43 +5263,42 @@ npm-run-path@^2.0.0:
dependencies:
path-key "^2.0.0"
-npmlog@^4.0.2:
- version "4.1.2"
- resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
- integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
+npm-run-path@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
+ integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
dependencies:
- are-we-there-yet "~1.1.2"
- console-control-strings "~1.1.0"
- gauge "~2.7.3"
- set-blocking "~2.0.0"
+ path-key "^3.0.0"
-nullthrows@^1.1.0:
+nuget-exe@5.8.0:
+ version "5.8.0"
+ resolved "https://registry.yarnpkg.com/nuget-exe/-/nuget-exe-5.8.0.tgz#45287c4ad8308a5a7057913b32c08998fe7fdc82"
+ integrity sha512-m95SBWa+SJNOfR0GTwdQ3OwK2915Ts3XvajYx0iaOZYydwvz6reJyptiNGf+HQhvTe5viNiRAmGXxNww9obZjw==
+
+nullthrows@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1"
integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==
-number-is-nan@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
-
-nwsapi@^2.0.7:
- version "2.1.4"
- resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.1.4.tgz#e006a878db23636f8e8a67d33ca0e4edf61a842f"
- integrity sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw==
+nwsapi@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7"
+ integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==
oauth-sign@~0.9.0:
version "0.9.0"
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
-ob1@0.55.0:
- version "0.55.0"
- resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.55.0.tgz#e393b4ae786ef442b3ef2a298ab70d6ec353dbdd"
- integrity sha512-pfyiMVsUItl8WiRKMT15eCi662pCRAuYTq2+V3UpE+PpFErJI/TvRh/M/l/9TaLlbFr7krJ7gdl+FXJNcybmvw==
+ob1@0.59.0:
+ version "0.59.0"
+ resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.59.0.tgz#ee103619ef5cb697f2866e3577da6f0ecd565a36"
+ integrity sha512-opXMTxyWJ9m68ZglCxwo0OPRESIC/iGmKFPXEXzMZqsVIrgoRXOHmoMDkQzz4y3irVjbyPJRAh5pI9fd0MJTFQ==
object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
object-copy@^0.1.0:
version "0.1.0"
@@ -4747,12 +5309,12 @@ object-copy@^0.1.0:
define-property "^0.2.5"
kind-of "^3.0.3"
-object-inspect@^1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b"
- integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==
+object-inspect@^1.11.0, object-inspect@^1.9.0:
+ version "1.12.0"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0"
+ integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==
-object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1:
+object-keys@^1.0.12, object-keys@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
@@ -4764,33 +5326,33 @@ object-visit@^1.0.0:
dependencies:
isobject "^3.0.0"
-object.assign@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da"
- integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==
+object.assign@^4.1.0, object.assign@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940"
+ integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==
dependencies:
- define-properties "^1.1.2"
- function-bind "^1.1.1"
- has-symbols "^1.0.0"
- object-keys "^1.0.11"
+ call-bind "^1.0.0"
+ define-properties "^1.1.3"
+ has-symbols "^1.0.1"
+ object-keys "^1.1.1"
-object.fromentries@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.0.tgz#49a543d92151f8277b3ac9600f1e930b189d30ab"
- integrity sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA==
+object.entries@^1.1.1:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861"
+ integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==
dependencies:
- define-properties "^1.1.2"
- es-abstract "^1.11.0"
- function-bind "^1.1.1"
- has "^1.0.1"
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+ es-abstract "^1.19.1"
-object.getownpropertydescriptors@^2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16"
- integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=
+object.fromentries@^2.0.2:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251"
+ integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==
dependencies:
- define-properties "^1.1.2"
- es-abstract "^1.5.1"
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+ es-abstract "^1.19.1"
object.pick@^1.3.0:
version "1.3.0"
@@ -4799,16 +5361,22 @@ object.pick@^1.3.0:
dependencies:
isobject "^3.0.1"
+object.values@^1.1.1:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac"
+ integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+ es-abstract "^1.19.1"
+
on-finished@~2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
+ integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
dependencies:
ee-first "1.1.1"
-on-headers@~1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7"
-
on-headers@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
@@ -4817,6 +5385,7 @@ on-headers@~1.0.2:
once@^1.3.0, once@^1.3.1, once@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
dependencies:
wrappy "1"
@@ -4827,6 +5396,13 @@ onetime@^2.0.0:
dependencies:
mimic-fn "^1.0.0"
+onetime@^5.1.0:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
+ integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
+ dependencies:
+ mimic-fn "^2.1.0"
+
open@^6.2.0:
version "6.4.0"
resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9"
@@ -4834,28 +5410,22 @@ open@^6.2.0:
dependencies:
is-wsl "^1.1.0"
-optimist@^0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
- dependencies:
- minimist "~0.0.1"
- wordwrap "~0.0.2"
-
-optionator@^0.8.1, optionator@^0.8.2:
- version "0.8.2"
- resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
- integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=
+optionator@^0.8.1, optionator@^0.8.3:
+ version "0.8.3"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
+ integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
dependencies:
deep-is "~0.1.3"
- fast-levenshtein "~2.0.4"
+ fast-levenshtein "~2.0.6"
levn "~0.3.0"
prelude-ls "~1.1.2"
type-check "~0.3.2"
- wordwrap "~1.0.0"
+ word-wrap "~1.2.3"
options@>=0.0.5:
version "0.0.6"
resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f"
+ integrity sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=
ora@^3.4.0:
version "3.4.0"
@@ -4869,83 +5439,43 @@ ora@^3.4.0:
strip-ansi "^5.2.0"
wcwidth "^1.0.1"
-os-homedir@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
-
-os-locale@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2"
- integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==
- dependencies:
- execa "^0.7.0"
- lcid "^1.0.0"
- mem "^1.1.0"
-
-os-locale@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a"
- integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==
- dependencies:
- execa "^1.0.0"
- lcid "^2.0.0"
- mem "^4.0.0"
-
os-tmpdir@^1.0.0, os-tmpdir@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
-
-osenv@^0.1.4:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
- integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
- dependencies:
- os-homedir "^1.0.0"
- os-tmpdir "^1.0.0"
+ integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
p-defer@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c"
integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=
-p-each-series@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71"
- integrity sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=
- dependencies:
- p-reduce "^1.0.0"
+p-each-series@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a"
+ integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==
p-finally@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
+p-finally@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561"
+ integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==
+
p-is-promise@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e"
integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==
-p-limit@^1.1.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
- integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
- dependencies:
- p-try "^1.0.0"
-
-p-limit@^2.0.0:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537"
- integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==
+p-limit@^2.0.0, p-limit@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
+ integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
dependencies:
p-try "^2.0.0"
-p-locate@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
- integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
- dependencies:
- p-limit "^1.1.0"
-
p-locate@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
@@ -4953,15 +5483,12 @@ p-locate@^3.0.0:
dependencies:
p-limit "^2.0.0"
-p-reduce@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa"
- integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=
-
-p-try@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
- integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
+p-locate@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
+ integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
+ dependencies:
+ p-limit "^2.2.0"
p-try@^2.0.0:
version "2.2.0"
@@ -4975,12 +5502,6 @@ parent-module@^1.0.0:
dependencies:
callsites "^3.0.0"
-parse-json@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
- dependencies:
- error-ex "^1.2.0"
-
parse-json@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
@@ -4989,15 +5510,25 @@ parse-json@^4.0.0:
error-ex "^1.3.1"
json-parse-better-errors "^1.0.1"
+parse-json@^5.0.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
+ integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ error-ex "^1.3.1"
+ json-parse-even-better-errors "^2.3.0"
+ lines-and-columns "^1.1.6"
+
parse-node-version@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b"
integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==
-parse5@4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608"
- integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==
+parse5@5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2"
+ integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==
parseurl@~1.3.3:
version "1.3.3"
@@ -5014,47 +5545,45 @@ path-exists@^3.0.0:
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
+path-exists@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
path-is-absolute@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
path-key@^2.0.0, path-key@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
-path-parse@^1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
- integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
+path-key@^3.0.0, path-key@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+ integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
-path-type@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
- integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=
- dependencies:
- pify "^2.0.0"
-
-path-type@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
- integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==
- dependencies:
- pify "^3.0.0"
+path-parse@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
+ integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
performance-now@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
-pify@^2.0.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+picocolors@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
+ integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
-pify@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
- integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
+picomatch@^2.0.4, picomatch@^2.2.3:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
+ integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
pify@^4.0.1:
version "4.0.1"
@@ -5062,11 +5591,9 @@ pify@^4.0.1:
integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
pirates@^4.0.0, pirates@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87"
- integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==
- dependencies:
- node-modules-regexp "^1.0.0"
+ version "4.0.5"
+ resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b"
+ integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==
pkg-dir@^3.0.0:
version "3.0.0"
@@ -5075,14 +5602,27 @@ pkg-dir@^3.0.0:
dependencies:
find-up "^3.0.0"
-plist@^3.0.0, plist@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.1.tgz#a9b931d17c304e8912ef0ba3bdd6182baf2e1f8c"
- integrity sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ==
+pkg-dir@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
+ integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
dependencies:
- base64-js "^1.2.3"
+ find-up "^4.0.0"
+
+pkg-up@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5"
+ integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==
+ dependencies:
+ find-up "^3.0.0"
+
+plist@^3.0.1, plist@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.4.tgz#a62df837e3aed2bb3b735899d510c4f186019cbe"
+ integrity sha512-ksrr8y9+nXOxQB2osVNqrgvX/XQPOXaU4BQMKjYq8PvaY1U18mo+fKgBSwzK+luSyinOuPae956lSVcBwxlAMg==
+ dependencies:
+ base64-js "^1.5.1"
xmlbuilder "^9.0.7"
- xmldom "0.1.x"
plugin-error@^0.1.2:
version "0.1.2"
@@ -5108,13 +5648,21 @@ posix-character-classes@^0.1.0:
prelude-ls@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+ integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
-prettier@1.16.4:
- version "1.16.4"
- resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.16.4.tgz#73e37e73e018ad2db9c76742e2647e21790c9717"
- integrity sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g==
+prettier-linter-helpers@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b"
+ integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==
+ dependencies:
+ fast-diff "^1.1.2"
-pretty-format@^24.7.0, pretty-format@^24.9.0:
+prettier@^2.0.2:
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a"
+ integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==
+
+pretty-format@^24.9.0:
version "24.9.0"
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9"
integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==
@@ -5124,59 +5672,66 @@ pretty-format@^24.7.0, pretty-format@^24.9.0:
ansi-styles "^3.2.0"
react-is "^16.8.4"
-private@^0.1.6:
- version "0.1.7"
- resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1"
-
-process-nextick-args@~1.0.6:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
+pretty-format@^25.1.0, pretty-format@^25.2.0, pretty-format@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a"
+ integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==
+ dependencies:
+ "@jest/types" "^25.5.0"
+ ansi-regex "^5.0.0"
+ ansi-styles "^4.0.0"
+ react-is "^16.12.0"
process-nextick-args@~2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
-process@~0.5.1:
- version "0.5.2"
- resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf"
-
progress@^2.0.0:
version "2.0.3"
resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
promise@^7.1.1:
- version "7.1.1"
- resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf"
+ version "7.3.1"
+ resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
+ integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==
dependencies:
asap "~2.0.3"
+promise@^8.0.3:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/promise/-/promise-8.1.0.tgz#697c25c3dfe7435dd79fcd58c38a135888eaf05e"
+ integrity sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==
+ dependencies:
+ asap "~2.0.6"
+
prompts@^2.0.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.2.1.tgz#f901dd2a2dfee080359c0e20059b24188d75ad35"
- integrity sha512-VObPvJiWPhpZI6C5m60XOzTfnYg/xc/an+r9VYymj9WJW3B/DIH+REzjpAACPf8brwPeP+7vz3bIim3S+AaMjw==
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069"
+ integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==
dependencies:
kleur "^3.0.3"
- sisteransi "^1.0.3"
+ sisteransi "^1.0.5"
-prop-types@^15.5.10, prop-types@^15.6.2, prop-types@^15.7.2:
- version "15.7.2"
- resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
- integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
+prop-types@*, prop-types@^15.6.2, prop-types@^15.7.2:
+ version "15.8.1"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
+ integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
dependencies:
loose-envify "^1.4.0"
object-assign "^4.1.1"
- react-is "^16.8.1"
+ react-is "^16.13.1"
-pseudomap@^1.0.1:
+pseudomap@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+ integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
-psl@^1.1.24, psl@^1.1.28:
- version "1.1.32"
- resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.32.tgz#3f132717cf2f9c169724b2b6caf373cf694198db"
- integrity sha512-MHACAkHpihU/REGGPLj4sEfc/XKW2bheigvHO1dUqjaKigMp1C8+WLQYRGgeKFMsw5PMfegZcaN8IDXK/cD0+g==
+psl@^1.1.28:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
+ integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
pump@^3.0.0:
version "3.0.0"
@@ -5186,186 +5741,146 @@ pump@^3.0.0:
end-of-stream "^1.1.0"
once "^1.3.1"
-punycode@^1.4.1:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
-
punycode@^2.1.0, punycode@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
qs@~6.5.2:
- version "6.5.2"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
- integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
+ version "6.5.3"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad"
+ integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==
range-parser@~1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
-rc@^1.2.7:
- version "1.2.8"
- resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
- integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
- dependencies:
- deep-extend "^0.6.0"
- ini "~1.3.0"
- minimist "^1.2.0"
- strip-json-comments "~2.0.1"
-
-react-deep-force-update@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-1.0.1.tgz#f911b5be1d2a6fe387507dd6e9a767aa2924b4c7"
-
-react-devtools-core@^3.6.1:
- version "3.6.3"
- resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-3.6.3.tgz#977d95b684c6ad28205f0c62e1e12c5f16675814"
- integrity sha512-+P+eFy/yo8Z/UH9J0DqHZuUM5+RI2wl249TNvMx3J2jpUomLQa4Zxl56GEotGfw3PIP1eI+hVf1s53FlUONStQ==
+react-devtools-core@^4.6.0:
+ version "4.23.0"
+ resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-4.23.0.tgz#dff9d12202a472ef62632203d6de3877dc6e58be"
+ integrity sha512-KkzneT1LczFtebbTJlvRphIRvzuHLhI9ghfrseVv9ktBs+l2cXy8Svw5U16lzQnwU9okVEcURmGPgH79WWrlaw==
dependencies:
shell-quote "^1.6.1"
- ws "^3.3.1"
+ ws "^7"
-react-is@^16.8.1:
- version "16.8.6"
- resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16"
- integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==
+react-is@^16.12.0, react-is@^16.13.1, react-is@^16.8.4, react-is@^16.8.6:
+ version "16.13.1"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
+ integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
-react-is@^16.8.4, react-is@^16.8.6:
- version "16.9.0"
- resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.9.0.tgz#21ca9561399aad0ff1a7701c01683e8ca981edcb"
- integrity sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw==
-
-"react-native-video@file:../..":
- version "5.0.1"
+react-native-video@../../:
+ version "6.0.0-alpha.1"
dependencies:
+ deprecated-react-native-prop-types "^2.2.0"
keymirror "^0.1.1"
- prop-types "^15.5.10"
- shaka-player "^2.4.4"
+ prop-types "^15.7.2"
-react-native@0.60.5:
- version "0.60.5"
- resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.60.5.tgz#3c1d9c06a0fbab9807220b6acac09488d39186ee"
- integrity sha512-cZwI0XzzihACN+7an1Dy46A83FRaAe2Xyd7laCalFFAppZIYeMVphZQWrVljJk5kIZBNtYG35TY1VsghQ0Oc2Q==
+react-native-windows@0.63.41:
+ version "0.63.41"
+ resolved "https://registry.yarnpkg.com/react-native-windows/-/react-native-windows-0.63.41.tgz#96f59bc24749b6c167cb4f35fd74b66f78f4a4bb"
+ integrity sha512-AhLQP0dzX4jhtv9AsR5KF+BIlccKKPzTSmivg3ZUirqQxXwDDMjtIGwgFnp1WyH8cFoUEvpuyNnHsU3f7LxEyg==
dependencies:
- "@babel/runtime" "^7.0.0"
- "@react-native-community/cli" "^2.6.0"
- "@react-native-community/cli-platform-android" "^2.6.0"
- "@react-native-community/cli-platform-ios" "^2.4.1"
+ "@babel/runtime" "^7.8.4"
+ "@react-native-windows/cli" "0.63.14"
abort-controller "^3.0.0"
- art "^0.10.0"
+ anser "^1.4.9"
base64-js "^1.1.2"
- connect "^3.6.5"
- create-react-class "^15.6.3"
- escape-string-regexp "^1.0.5"
event-target-shim "^5.0.1"
fbjs "^1.0.0"
fbjs-scripts "^1.1.0"
- hermesvm "^0.1.0"
invariant "^2.2.4"
- jsc-android "245459.0.0"
- metro-babel-register "0.54.1"
- metro-react-native-babel-transformer "0.54.1"
- metro-source-map "^0.55.0"
- nullthrows "^1.1.0"
- pretty-format "^24.7.0"
- promise "^7.1.1"
+ nullthrows "^1.1.1"
+ pretty-format "^24.9.0"
+ promise "^8.0.3"
prop-types "^15.7.2"
- react-devtools-core "^3.6.1"
+ react-devtools-core "^4.6.0"
regenerator-runtime "^0.13.2"
- scheduler "0.14.0"
+ scheduler "0.19.1"
stacktrace-parser "^0.1.3"
+ use-subscription "^1.0.0"
whatwg-fetch "^3.0.0"
-react-proxy@^1.1.7:
- version "1.1.8"
- resolved "https://registry.yarnpkg.com/react-proxy/-/react-proxy-1.1.8.tgz#9dbfd9d927528c3aa9f444e4558c37830ab8c26a"
+react-native@0.63.4:
+ version "0.63.4"
+ resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.63.4.tgz#2210fdd404c94a5fa6b423c6de86f8e48810ec36"
+ integrity sha512-I4kM8kYO2mWEYUFITMcpRulcy4/jd+j9T6PbIzR0FuMcz/xwd+JwHoLPa1HmCesvR1RDOw9o4D+OFLwuXXfmGw==
dependencies:
- lodash "^4.6.1"
- react-deep-force-update "^1.0.0"
+ "@babel/runtime" "^7.0.0"
+ "@react-native-community/cli" "^4.10.0"
+ "@react-native-community/cli-platform-android" "^4.10.0"
+ "@react-native-community/cli-platform-ios" "^4.10.0"
+ abort-controller "^3.0.0"
+ anser "^1.4.9"
+ base64-js "^1.1.2"
+ event-target-shim "^5.0.1"
+ fbjs "^1.0.0"
+ fbjs-scripts "^1.1.0"
+ hermes-engine "~0.5.0"
+ invariant "^2.2.4"
+ jsc-android "^245459.0.0"
+ metro-babel-register "0.59.0"
+ metro-react-native-babel-transformer "0.59.0"
+ metro-source-map "0.59.0"
+ nullthrows "^1.1.1"
+ pretty-format "^24.9.0"
+ promise "^8.0.3"
+ prop-types "^15.7.2"
+ react-devtools-core "^4.6.0"
+ react-refresh "^0.4.0"
+ regenerator-runtime "^0.13.2"
+ scheduler "0.19.1"
+ stacktrace-parser "^0.1.3"
+ use-subscription "^1.0.0"
+ whatwg-fetch "^3.0.0"
react-refresh@^0.4.0:
- version "0.4.2"
- resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.4.2.tgz#54a277a6caaac2803d88f1d6f13c1dcfbd81e334"
- integrity sha512-kv5QlFFSZWo7OlJFNYbxRtY66JImuP2LcrFgyJfQaf85gSP+byzG21UbDQEYjU7f//ny8rwiEkO6py2Y+fEgAQ==
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.4.3.tgz#966f1750c191672e76e16c2efa569150cc73ab53"
+ integrity sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==
-react-test-renderer@16.8.6:
- version "16.8.6"
- resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.8.6.tgz#188d8029b8c39c786f998aa3efd3ffe7642d5ba1"
- integrity sha512-H2srzU5IWYT6cZXof6AhUcx/wEyJddQ8l7cLM/F7gDXYyPr4oq+vCIxJYXVGhId1J706sqziAjuOEjyNkfgoEw==
+react-test-renderer@16.13.1:
+ version "16.13.1"
+ resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.13.1.tgz#de25ea358d9012606de51e012d9742e7f0deabc1"
+ integrity sha512-Sn2VRyOK2YJJldOqoh8Tn/lWQ+ZiKhyZTPtaO0Q6yNj+QDbmRkVFap6pZPy3YQk8DScRDfyqm/KxKYP9gCMRiQ==
dependencies:
object-assign "^4.1.1"
prop-types "^15.6.2"
react-is "^16.8.6"
- scheduler "^0.13.6"
+ scheduler "^0.19.1"
-react-transform-hmr@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/react-transform-hmr/-/react-transform-hmr-1.0.4.tgz#e1a40bd0aaefc72e8dfd7a7cda09af85066397bb"
- dependencies:
- global "^4.3.0"
- react-proxy "^1.1.7"
-
-react@16.9.0:
- version "16.9.0"
- resolved "https://registry.yarnpkg.com/react/-/react-16.9.0.tgz#40ba2f9af13bc1a38d75dbf2f4359a5185c4f7aa"
- integrity sha512-+7LQnFBwkiw+BobzOF6N//BdoNw0ouwmSJTEm9cglOOmsg/TMiFHZLe2sEoN5M7LgJTj9oHH0gxklfnQe66S1w==
+react@16.13.1:
+ version "16.13.1"
+ resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e"
+ integrity sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==
dependencies:
loose-envify "^1.1.0"
object-assign "^4.1.1"
prop-types "^15.6.2"
-read-pkg-up@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
- integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=
+read-pkg-up@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507"
+ integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==
dependencies:
- find-up "^2.0.0"
- read-pkg "^2.0.0"
+ find-up "^4.1.0"
+ read-pkg "^5.2.0"
+ type-fest "^0.8.1"
-read-pkg-up@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978"
- integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==
+read-pkg@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc"
+ integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==
dependencies:
- find-up "^3.0.0"
- read-pkg "^3.0.0"
+ "@types/normalize-package-data" "^2.4.0"
+ normalize-package-data "^2.5.0"
+ parse-json "^5.0.0"
+ type-fest "^0.6.0"
-read-pkg@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
- integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=
- dependencies:
- load-json-file "^2.0.0"
- normalize-package-data "^2.3.2"
- path-type "^2.0.0"
-
-read-pkg@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
- integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=
- dependencies:
- load-json-file "^4.0.0"
- normalize-package-data "^2.3.2"
- path-type "^3.0.0"
-
-"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.1.5, readable-stream@^2.2.2:
- version "2.2.3"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.3.tgz#9cf49463985df016c8ae8813097a9293a9b33729"
- dependencies:
- buffer-shims "^1.0.0"
- core-util-is "~1.0.0"
- inherits "~2.0.1"
- isarray "~1.0.0"
- process-nextick-args "~1.0.6"
- string_decoder "~0.10.x"
- util-deprecate "~1.0.1"
-
-readable-stream@~2.3.6:
- version "2.3.6"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
- integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
+readable-stream@^2.0.1, readable-stream@^2.2.2, readable-stream@~2.3.6:
+ version "2.3.7"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
+ integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
dependencies:
core-util-is "~1.0.0"
inherits "~2.0.3"
@@ -5375,36 +5890,41 @@ readable-stream@~2.3.6:
string_decoder "~1.1.1"
util-deprecate "~1.0.1"
-realpath-native@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c"
- integrity sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==
+realpath-native@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-2.0.0.tgz#7377ac429b6e1fd599dc38d08ed942d0d7beb866"
+ integrity sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q==
+
+rechoir@^0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
+ integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=
dependencies:
- util.promisify "^1.0.0"
+ resolve "^1.1.6"
-regenerate-unicode-properties@^8.1.0:
- version "8.1.0"
- resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e"
- integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==
+regenerate-unicode-properties@^9.0.0:
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326"
+ integrity sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==
dependencies:
- regenerate "^1.4.0"
+ regenerate "^1.4.2"
-regenerate@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11"
- integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==
+regenerate@^1.4.2:
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a"
+ integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==
-regenerator-runtime@^0.13.2:
- version "0.13.3"
- resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5"
- integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==
+regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.4:
+ version "0.13.9"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52"
+ integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==
-regenerator-transform@^0.14.0:
- version "0.14.1"
- resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb"
- integrity sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==
+regenerator-transform@^0.14.2:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4"
+ integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==
dependencies:
- private "^0.1.6"
+ "@babel/runtime" "^7.8.4"
regex-not@^1.0.0, regex-not@^1.0.2:
version "1.0.2"
@@ -5414,32 +5934,45 @@ regex-not@^1.0.0, regex-not@^1.0.2:
extend-shallow "^3.0.2"
safe-regex "^1.1.0"
+regexp.prototype.flags@^1.3.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz#b3f4c0059af9e47eca9f3f660e51d81307e72307"
+ integrity sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+
regexpp@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f"
integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==
-regexpu-core@^4.5.4:
- version "4.6.0"
- resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6"
- integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==
+regexpp@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2"
+ integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==
+
+regexpu-core@^4.7.1:
+ version "4.8.0"
+ resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.8.0.tgz#e5605ba361b67b1718478501327502f4479a98f0"
+ integrity sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==
dependencies:
- regenerate "^1.4.0"
- regenerate-unicode-properties "^8.1.0"
- regjsgen "^0.5.0"
- regjsparser "^0.6.0"
- unicode-match-property-ecmascript "^1.0.4"
- unicode-match-property-value-ecmascript "^1.1.0"
+ regenerate "^1.4.2"
+ regenerate-unicode-properties "^9.0.0"
+ regjsgen "^0.5.2"
+ regjsparser "^0.7.0"
+ unicode-match-property-ecmascript "^2.0.0"
+ unicode-match-property-value-ecmascript "^2.0.0"
-regjsgen@^0.5.0:
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd"
- integrity sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==
+regjsgen@^0.5.2:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733"
+ integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==
-regjsparser@^0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c"
- integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==
+regjsparser@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.7.0.tgz#a6b667b54c885e18b52554cb4960ef71187e9968"
+ integrity sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==
dependencies:
jsesc "~0.5.0"
@@ -5449,33 +5982,35 @@ remove-trailing-separator@^1.0.1:
integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
repeat-element@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9"
+ integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==
repeat-string@^1.6.1:
version "1.6.1"
resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+ integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
-request-promise-core@1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.2.tgz#339f6aababcafdb31c799ff158700336301d3346"
- integrity sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==
+request-promise-core@1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f"
+ integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==
dependencies:
- lodash "^4.17.11"
+ lodash "^4.17.19"
-request-promise-native@^1.0.5:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.7.tgz#a49868a624bdea5069f1251d0a836e0d89aa2c59"
- integrity sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==
+request-promise-native@^1.0.7:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28"
+ integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==
dependencies:
- request-promise-core "1.1.2"
+ request-promise-core "1.1.4"
stealthy-require "^1.1.1"
tough-cookie "^2.3.3"
-request@^2.87.0:
- version "2.88.0"
- resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
- integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==
+request@^2.88.0:
+ version "2.88.2"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"
+ integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==
dependencies:
aws-sign2 "~0.7.0"
aws4 "^1.8.0"
@@ -5484,7 +6019,7 @@ request@^2.87.0:
extend "~3.0.2"
forever-agent "~0.6.1"
form-data "~2.3.2"
- har-validator "~5.1.0"
+ har-validator "~5.1.3"
http-signature "~1.2.0"
is-typedarray "~1.0.0"
isstream "~0.1.2"
@@ -5494,29 +6029,31 @@ request@^2.87.0:
performance-now "^2.1.0"
qs "~6.5.2"
safe-buffer "^5.1.2"
- tough-cookie "~2.4.3"
+ tough-cookie "~2.5.0"
tunnel-agent "^0.6.0"
uuid "^3.3.2"
require-directory@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
-
-require-main-filename@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
+ integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
require-main-filename@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
-resolve-cwd@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
- integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=
+reselect@^4.0.0:
+ version "4.1.5"
+ resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.5.tgz#852c361247198da6756d07d9296c2b51eddb79f6"
+ integrity sha512-uVdlz8J7OO+ASpBYoz1Zypgx0KasCY20H+N8JD13oUMtPvSHQuscrHop4KbXrbsBcdB9Ds7lVK7eRkBIfO43vQ==
+
+resolve-cwd@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
+ integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==
dependencies:
- resolve-from "^3.0.0"
+ resolve-from "^5.0.0"
resolve-from@^3.0.0:
version "3.0.0"
@@ -5528,6 +6065,11 @@ resolve-from@^4.0.0:
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+resolve-from@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
+ integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
+
resolve-url@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
@@ -5538,19 +6080,14 @@ resolve@1.1.7:
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=
-resolve@^1.3.2, resolve@^1.5.0:
- version "1.11.0"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.0.tgz#4014870ba296176b86343d50b60f3b50609ce232"
- integrity sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==
+resolve@^1.1.6, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.15.1, resolve@^1.17.0, resolve@^1.5.0:
+ version "1.22.0"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198"
+ integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==
dependencies:
- path-parse "^1.0.6"
-
-resolve@^1.8.1, resolve@^1.9.0:
- version "1.12.0"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6"
- integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==
- dependencies:
- path-parse "^1.0.6"
+ is-core-module "^2.8.1"
+ path-parse "^1.0.7"
+ supports-preserve-symlinks-flag "^1.0.0"
restore-cursor@^2.0.0:
version "2.0.0"
@@ -5560,12 +6097,20 @@ restore-cursor@^2.0.0:
onetime "^2.0.0"
signal-exit "^3.0.2"
+restore-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
+ integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
+ dependencies:
+ onetime "^5.1.0"
+ signal-exit "^3.0.2"
+
ret@~0.1.10:
version "0.1.15"
resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
-rimraf@2.6.3, rimraf@^2.6.1:
+rimraf@2.6.3:
version "2.6.3"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
@@ -5573,32 +6118,33 @@ rimraf@2.6.3, rimraf@^2.6.1:
glob "^7.1.3"
rimraf@^2.5.4:
- version "2.6.1"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d"
- dependencies:
- glob "^7.0.5"
-
-rimraf@^2.6.3:
version "2.7.1"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
dependencies:
glob "^7.1.3"
+rimraf@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+ integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+ dependencies:
+ glob "^7.1.3"
+
rimraf@~2.2.6:
version "2.2.8"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582"
+ integrity sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=
rsvp@^4.8.4:
version "4.8.5"
resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734"
integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==
-run-async@^2.2.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
- dependencies:
- is-promise "^2.1.0"
+run-async@^2.2.0, run-async@^2.4.0:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
+ integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==
rx-lite-aggregates@^4.0.8:
version "4.0.8"
@@ -5612,28 +6158,22 @@ rx-lite@*, rx-lite@^4.0.8:
resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444"
integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=
-rxjs@^5.4.3:
- version "5.5.12"
- resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc"
- integrity sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==
- dependencies:
- symbol-observable "1.0.1"
-
-rxjs@^6.4.0:
- version "6.5.3"
- resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a"
- integrity sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==
+rxjs@^6.6.0:
+ version "6.6.7"
+ resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9"
+ integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==
dependencies:
tslib "^1.9.0"
-safe-buffer@5.1.2, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.2"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-safe-buffer@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7"
+safe-buffer@^5.0.1, safe-buffer@^5.1.2:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+ integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
safe-regex@^1.1.0:
version "1.1.0"
@@ -5642,7 +6182,7 @@ safe-regex@^1.1.0:
dependencies:
ret "~0.1.10"
-"safer-buffer@>= 2.1.2 < 3":
+"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
version "2.1.2"
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
@@ -5662,55 +6202,52 @@ sane@^4.0.3:
minimist "^1.1.1"
walker "~1.0.5"
-sax@^1.2.1, sax@^1.2.4:
+sax@^1.2.1:
version "1.2.4"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
-scheduler@0.14.0:
- version "0.14.0"
- resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.14.0.tgz#b392c23c9c14bfa2933d4740ad5603cc0d59ea5b"
- integrity sha512-9CgbS06Kki2f4R9FjLSITjZo5BZxPsryiRNyL3LpvrM9WxcVmhlqAOc9E+KQbeI2nqej4JIIbOsfdL51cNb4Iw==
+saxes@^3.1.9:
+ version "3.1.11"
+ resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b"
+ integrity sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==
+ dependencies:
+ xmlchars "^2.1.1"
+
+scheduler@0.19.1, scheduler@^0.19.1:
+ version "0.19.1"
+ resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196"
+ integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==
dependencies:
loose-envify "^1.1.0"
object-assign "^4.1.1"
-scheduler@^0.13.6:
- version "0.13.6"
- resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.13.6.tgz#466a4ec332467b31a91b9bf74e5347072e4cd889"
- integrity sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==
- dependencies:
- loose-envify "^1.1.0"
- object-assign "^4.1.1"
-
-"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0:
- version "5.3.0"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
-
-semver@5.5.0:
- version "5.5.0"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
- integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==
-
-semver@^5.3.0, semver@^5.4.1, semver@^5.5.0:
- version "5.7.0"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b"
- integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==
-
-semver@^5.5.1, semver@^5.6.0:
+"semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0:
version "5.7.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
-semver@^6.0.0, semver@^6.1.2, semver@^6.2.0:
+semver@7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
+ integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
+
+semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0:
version "6.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
-send@0.17.1:
- version "0.17.1"
- resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8"
- integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==
+semver@^7.1.3, semver@^7.3.2:
+ version "7.3.5"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
+ integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
+ dependencies:
+ lru-cache "^6.0.0"
+
+send@0.17.2:
+ version "0.17.2"
+ resolved "https://registry.yarnpkg.com/send/-/send-0.17.2.tgz#926622f76601c41808012c8bf1688fe3906f7820"
+ integrity sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==
dependencies:
debug "2.6.9"
depd "~1.1.2"
@@ -5719,9 +6256,9 @@ send@0.17.1:
escape-html "~1.0.3"
etag "~1.8.1"
fresh "0.5.2"
- http-errors "~1.7.2"
+ http-errors "1.8.1"
mime "1.6.0"
- ms "2.1.1"
+ ms "2.1.3"
on-finished "~2.3.0"
range-parser "~1.2.1"
statuses "~1.5.0"
@@ -5732,33 +6269,24 @@ serialize-error@^2.1.0:
integrity sha1-ULZ51WNc34Rme9yOWa9OW4HV9go=
serve-static@^1.13.1:
- version "1.14.1"
- resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9"
- integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==
+ version "1.14.2"
+ resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.2.tgz#722d6294b1d62626d41b43a013ece4598d292bfa"
+ integrity sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==
dependencies:
encodeurl "~1.0.2"
escape-html "~1.0.3"
parseurl "~1.3.3"
- send "0.17.1"
+ send "0.17.2"
-set-blocking@^2.0.0, set-blocking@~2.0.0:
+set-blocking@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+ integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
-set-value@^0.4.3:
- version "0.4.3"
- resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1"
- integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE=
- dependencies:
- extend-shallow "^2.0.1"
- is-extendable "^0.1.1"
- is-plain-object "^2.0.1"
- to-object-path "^0.3.0"
-
-set-value@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274"
- integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==
+set-value@^2.0.0, set-value@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
+ integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
dependencies:
extend-shallow "^2.0.1"
is-extendable "^0.1.1"
@@ -5768,16 +6296,19 @@ set-value@^2.0.0:
setimmediate@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+ integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
-setprototypeof@1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
- integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
+setprototypeof@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
+ integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
-shaka-player@^2.4.4:
- version "2.5.2"
- resolved "https://registry.yarnpkg.com/shaka-player/-/shaka-player-2.5.2.tgz#3e639f8f5dfdb1a0afff2ff1f87cddf481f93fe4"
- integrity sha512-gpRfXVLAZi33kw9Egop18MkZ/EVRS0soeN6ocR+Btq/J5IoCC56MxwwHzAGna+PgBW9Ox458HRefJ6HB0BoADA==
+shallow-clone@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3"
+ integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==
+ dependencies:
+ kind-of "^6.0.2"
shebang-command@^1.2.0:
version "1.2.0"
@@ -5786,42 +6317,84 @@ shebang-command@^1.2.0:
dependencies:
shebang-regex "^1.0.0"
+shebang-command@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+ integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+ dependencies:
+ shebang-regex "^3.0.0"
+
shebang-regex@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
-shell-quote@1.6.1, shell-quote@^1.6.1:
+shebang-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+ integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+shell-quote@1.6.1:
version "1.6.1"
resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767"
+ integrity sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=
dependencies:
array-filter "~0.0.0"
array-map "~0.0.0"
array-reduce "~0.0.0"
jsonify "~0.0.0"
+shell-quote@^1.6.1:
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123"
+ integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==
+
+shelljs@^0.8.4:
+ version "0.8.5"
+ resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c"
+ integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==
+ dependencies:
+ glob "^7.0.0"
+ interpret "^1.0.0"
+ rechoir "^0.6.2"
+
shellwords@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b"
integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==
+shimmer@^1.1.0, shimmer@^1.2.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337"
+ integrity sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==
+
+side-channel@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
+ integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
+ dependencies:
+ call-bind "^1.0.0"
+ get-intrinsic "^1.0.2"
+ object-inspect "^1.9.0"
+
signal-exit@^3.0.0, signal-exit@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af"
+ integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==
simple-plist@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-1.0.0.tgz#bed3085633b22f371e111f45d159a1ccf94b81eb"
- integrity sha512-043L2rO80LVF7zfZ+fqhsEkoJFvW8o59rt/l4ctx1TJWoTx7/jkiS1R5TatD15Z1oYnuLJytzE7gcnnBuIPL2g==
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-1.3.0.tgz#f451997663eafd8ea6bad353a01caf49ef186d43"
+ integrity sha512-uYWpeGFtZtVt2NhG4AHgpwx323zxD85x42heMJBan1qAiqqozIlaGrwrEt6kRjXWRWIXsuV1VLCvVmZan2B5dg==
dependencies:
- bplist-creator "0.0.7"
- bplist-parser "0.1.1"
- plist "^3.0.1"
+ bplist-creator "0.1.0"
+ bplist-parser "0.3.0"
+ plist "^3.0.4"
-sisteransi@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.3.tgz#98168d62b79e3a5e758e27ae63c4a053d748f4eb"
- integrity sha512-SbEG75TzH8G7eVXFSN5f9EExILKfly7SUvVY5DhhYLvfhKqhDFY0OzevWa/zwak0RLRfWS5AvfMWpd9gJvr5Yg==
+sisteransi@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
+ integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==
slash@^2.0.0:
version "2.0.0"
@@ -5842,10 +6415,6 @@ slice-ansi@^2.0.0, slice-ansi@^2.1.0:
astral-regex "^1.0.0"
is-fullwidth-code-point "^2.0.0"
-slide@^1.1.5:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707"
-
snapdragon-node@^2.0.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
@@ -5877,51 +6446,69 @@ snapdragon@^0.8.1:
use "^3.1.0"
source-map-resolve@^0.5.0:
- version "0.5.2"
- resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259"
- integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
+ integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==
dependencies:
- atob "^2.1.1"
+ atob "^2.1.2"
decode-uri-component "^0.2.0"
resolve-url "^0.2.1"
source-map-url "^0.4.0"
urix "^0.1.0"
-source-map-support@^0.5.6, source-map-support@^0.5.9:
- version "0.5.13"
- resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932"
- integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==
+source-map-support@^0.5.16, source-map-support@^0.5.6:
+ version "0.5.21"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
+ integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
dependencies:
buffer-from "^1.0.0"
source-map "^0.6.0"
source-map-url@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
- integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56"
+ integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==
source-map@^0.5.0, source-map@^0.5.6:
- version "0.5.6"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+ integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
-spdx-correct@~1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
+source-map@^0.7.3:
+ version "0.7.3"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
+ integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
+
+spdx-correct@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9"
+ integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==
dependencies:
- spdx-license-ids "^1.0.2"
+ spdx-expression-parse "^3.0.0"
+ spdx-license-ids "^3.0.0"
-spdx-expression-parse@~1.0.0:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c"
+spdx-exceptions@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d"
+ integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==
-spdx-license-ids@^1.0.2:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57"
+spdx-expression-parse@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679"
+ integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==
+ dependencies:
+ spdx-exceptions "^2.1.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-license-ids@^3.0.0:
+ version "3.0.11"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95"
+ integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==
split-string@^3.0.1, split-string@^3.0.2:
version "3.1.0"
@@ -5936,28 +6523,43 @@ sprintf-js@~1.0.2:
integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
sshpk@^1.7.0:
- version "1.11.0"
- resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.11.0.tgz#2d8d5ebb4a6fab28ffba37fa62a90f4a3ea59d77"
+ version "1.17.0"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5"
+ integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==
dependencies:
asn1 "~0.2.3"
assert-plus "^1.0.0"
- dashdash "^1.12.0"
- getpass "^0.1.1"
- optionalDependencies:
bcrypt-pbkdf "^1.0.0"
+ dashdash "^1.12.0"
ecc-jsbn "~0.1.1"
- jodid25519 "^1.0.0"
+ getpass "^0.1.1"
jsbn "~0.1.0"
+ safer-buffer "^2.0.2"
tweetnacl "~0.14.0"
+stack-chain@^1.3.7:
+ version "1.3.7"
+ resolved "https://registry.yarnpkg.com/stack-chain/-/stack-chain-1.3.7.tgz#d192c9ff4ea6a22c94c4dd459171e3f00cea1285"
+ integrity sha1-0ZLJ/06moiyUxN1FkXHj8AzqEoU=
+
stack-utils@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8"
- integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.5.tgz#a19b0b01947e0029c8e451d5d61a498f5bb1471b"
+ integrity sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==
+ dependencies:
+ escape-string-regexp "^2.0.0"
+
+stackframe@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303"
+ integrity sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==
stacktrace-parser@^0.1.3:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.4.tgz#01397922e5f62ecf30845522c95c4fe1d25e7d4e"
+ version "0.1.10"
+ resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a"
+ integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==
+ dependencies:
+ type-fest "^0.7.1"
static-extend@^0.1.1:
version "0.1.2"
@@ -5977,28 +6579,20 @@ stealthy-require@^1.1.1:
resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b"
integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=
-stream-buffers@~2.2.0:
+stream-buffers@2.2.x:
version "2.2.0"
resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4"
integrity sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=
-string-length@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed"
- integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=
+string-length@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/string-length/-/string-length-3.1.0.tgz#107ef8c23456e187a8abd4a61162ff4ac6e25837"
+ integrity sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==
dependencies:
astral-regex "^1.0.0"
- strip-ansi "^4.0.0"
+ strip-ansi "^5.2.0"
-string-width@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
- dependencies:
- code-point-at "^1.0.0"
- is-fullwidth-code-point "^1.0.0"
- strip-ansi "^3.0.0"
-
-"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1:
+string-width@^2.1.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
@@ -6015,25 +6609,44 @@ string-width@^3.0.0, string-width@^3.1.0:
is-fullwidth-code-point "^2.0.0"
strip-ansi "^5.1.0"
-string.prototype.trimleft@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634"
- integrity sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==
+string-width@^4.1.0, string-width@^4.2.0:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+ integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
dependencies:
- define-properties "^1.1.3"
- function-bind "^1.1.1"
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.1"
-string.prototype.trimright@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58"
- integrity sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==
+string.prototype.matchall@^4.0.2:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz#5abb5dabc94c7b0ea2380f65ba610b3a544b15fa"
+ integrity sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==
dependencies:
+ call-bind "^1.0.2"
define-properties "^1.1.3"
- function-bind "^1.1.1"
+ es-abstract "^1.19.1"
+ get-intrinsic "^1.1.1"
+ has-symbols "^1.0.2"
+ internal-slot "^1.0.3"
+ regexp.prototype.flags "^1.3.1"
+ side-channel "^1.0.4"
-string_decoder@~0.10.x:
- version "0.10.31"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+string.prototype.trimend@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80"
+ integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+
+string.prototype.trimstart@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed"
+ integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
string_decoder@~1.1.1:
version "1.1.1"
@@ -6042,12 +6655,6 @@ string_decoder@~1.1.1:
dependencies:
safe-buffer "~5.1.0"
-strip-ansi@^3.0.0, strip-ansi@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
- dependencies:
- ansi-regex "^2.0.0"
-
strip-ansi@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
@@ -6062,24 +6669,37 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
dependencies:
ansi-regex "^4.1.0"
-strip-bom@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
- integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
+strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+ integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+ dependencies:
+ ansi-regex "^5.0.1"
+
+strip-bom@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878"
+ integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==
strip-eof@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
-strip-json-comments@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7"
- integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==
+strip-final-newline@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
+ integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
-strip-json-comments@~2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+strip-json-comments@^3.0.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
+ integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+
+sudo-prompt@^9.0.0:
+ version "9.2.1"
+ resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-9.2.1.tgz#77efb84309c9ca489527a4e749f287e6bdd52afd"
+ integrity sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==
supports-color@^5.3.0:
version "5.5.0"
@@ -6095,10 +6715,25 @@ supports-color@^6.1.0:
dependencies:
has-flag "^3.0.0"
-symbol-observable@1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4"
- integrity sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=
+supports-color@^7.0.0, supports-color@^7.1.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
+ integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
+ dependencies:
+ has-flag "^4.0.0"
+
+supports-hyperlinks@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb"
+ integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==
+ dependencies:
+ has-flag "^4.0.0"
+ supports-color "^7.0.0"
+
+supports-preserve-symlinks-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
+ integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
symbol-tree@^3.2.2:
version "3.2.4"
@@ -6115,54 +6750,47 @@ table@^5.2.3:
slice-ansi "^2.1.0"
string-width "^3.0.0"
-tar@^4:
- version "4.4.10"
- resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1"
- integrity sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA==
- dependencies:
- chownr "^1.1.1"
- fs-minipass "^1.2.5"
- minipass "^2.3.5"
- minizlib "^1.2.1"
- mkdirp "^0.5.0"
- safe-buffer "^5.1.2"
- yallist "^3.0.3"
-
temp@0.8.3:
version "0.8.3"
resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59"
+ integrity sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=
dependencies:
os-tmpdir "^1.0.0"
rimraf "~2.2.6"
-test-exclude@^5.2.3:
- version "5.2.3"
- resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0"
- integrity sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==
+terminal-link@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994"
+ integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==
dependencies:
- glob "^7.1.3"
+ ansi-escapes "^4.2.1"
+ supports-hyperlinks "^2.0.0"
+
+test-exclude@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e"
+ integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==
+ dependencies:
+ "@istanbuljs/schema" "^0.1.2"
+ glob "^7.1.4"
minimatch "^3.0.4"
- read-pkg-up "^4.0.0"
- require-main-filename "^2.0.0"
text-table@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
-throat@^4.0.0, throat@^4.1.0:
+throat@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a"
integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=
-through2@^2.0.0:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be"
- dependencies:
- readable-stream "^2.1.5"
- xtend "~4.0.1"
+throat@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b"
+ integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==
-through2@^2.0.1:
+through2@^2.0.0, through2@^2.0.1:
version "2.0.5"
resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
@@ -6173,10 +6801,12 @@ through2@^2.0.1:
through@^2.3.6:
version "2.3.8"
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+ integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
time-stamp@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.0.1.tgz#9f4bd23559c9365966f3302dbba2b07c6b99b151"
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3"
+ integrity sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=
tmp@^0.0.33:
version "0.0.33"
@@ -6185,9 +6815,10 @@ tmp@^0.0.33:
dependencies:
os-tmpdir "~1.0.2"
-tmpl@1.0.x:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1"
+tmpl@1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc"
+ integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==
to-fast-properties@^2.0.0:
version "2.0.0"
@@ -6209,6 +6840,13 @@ to-regex-range@^2.1.0:
is-number "^3.0.0"
repeat-string "^1.6.1"
+to-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ dependencies:
+ is-number "^7.0.0"
+
to-regex@^3.0.1, to-regex@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
@@ -6219,12 +6857,12 @@ to-regex@^3.0.1, to-regex@^3.0.2:
regex-not "^1.0.2"
safe-regex "^1.1.0"
-toidentifier@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
- integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
+toidentifier@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
+ integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
-tough-cookie@^2.3.3, tough-cookie@^2.3.4:
+tough-cookie@^2.3.3, tough-cookie@~2.5.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
@@ -6232,13 +6870,14 @@ tough-cookie@^2.3.3, tough-cookie@^2.3.4:
psl "^1.1.28"
punycode "^2.1.1"
-tough-cookie@~2.4.3:
- version "2.4.3"
- resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781"
- integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==
+tough-cookie@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2"
+ integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==
dependencies:
- psl "^1.1.24"
- punycode "^1.4.1"
+ ip-regex "^2.1.0"
+ psl "^1.1.28"
+ punycode "^2.1.1"
tr46@^1.0.1:
version "1.0.1"
@@ -6247,46 +6886,83 @@ tr46@^1.0.1:
dependencies:
punycode "^2.1.0"
-trim-right@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
+tr46@~0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
+ integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=
tslib@^1.8.1, tslib@^1.9.0:
- version "1.10.0"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"
- integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
+ integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
-tsutils@^3.7.0:
- version "3.17.1"
- resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759"
- integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==
+tsutils@^3.17.1:
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
+ integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==
dependencies:
tslib "^1.8.1"
tunnel-agent@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+ integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
dependencies:
safe-buffer "^5.0.1"
tweetnacl@^0.14.3, tweetnacl@~0.14.0:
version "0.14.5"
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+ integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
type-check@~0.3.2:
version "0.3.2"
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+ integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
dependencies:
prelude-ls "~1.1.2"
+type-detect@4.0.8:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
+ integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
+
+type-fest@^0.21.3:
+ version "0.21.3"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
+ integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==
+
+type-fest@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
+ integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==
+
+type-fest@^0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48"
+ integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==
+
+type-fest@^0.8.1:
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
+ integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
+
+typedarray-to-buffer@^3.1.5:
+ version "3.1.5"
+ resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
+ integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
+ dependencies:
+ is-typedarray "^1.0.0"
+
typedarray@^0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+ integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
ua-parser-js@^0.7.18:
- version "0.7.20"
- resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.20.tgz#7527178b82f6a62a0f243d1f94fd30e3e3c21098"
- integrity sha512-8OaIKfzL5cpx8eCMAhhvTlft8GYF8b2eQr6JkCyVdrgjcytyOmPCXrqXFcUnhonRpLlh5yxEZVohm6mzaowUOw==
+ version "0.7.31"
+ resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.31.tgz#649a656b191dffab4f21d5e053e27ca17cbff5c6"
+ integrity sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==
uglify-es@^3.1.9:
version "3.3.9"
@@ -6296,55 +6972,53 @@ uglify-es@^3.1.9:
commander "~2.13.0"
source-map "~0.6.1"
-uglify-js@^3.1.4:
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5"
- integrity sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==
- dependencies:
- commander "~2.20.0"
- source-map "~0.6.1"
-
ultron@1.0.x:
version "1.0.2"
resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa"
+ integrity sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=
-ultron@~1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c"
- integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==
-
-unicode-canonical-property-names-ecmascript@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"
- integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==
-
-unicode-match-property-ecmascript@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c"
- integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==
+unbox-primitive@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471"
+ integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==
dependencies:
- unicode-canonical-property-names-ecmascript "^1.0.4"
- unicode-property-aliases-ecmascript "^1.0.4"
+ function-bind "^1.1.1"
+ has-bigints "^1.0.1"
+ has-symbols "^1.0.2"
+ which-boxed-primitive "^1.0.2"
-unicode-match-property-value-ecmascript@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277"
- integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==
+unicode-canonical-property-names-ecmascript@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc"
+ integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==
-unicode-property-aliases-ecmascript@^1.0.4:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57"
- integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==
+unicode-match-property-ecmascript@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3"
+ integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==
+ dependencies:
+ unicode-canonical-property-names-ecmascript "^2.0.0"
+ unicode-property-aliases-ecmascript "^2.0.0"
+
+unicode-match-property-value-ecmascript@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714"
+ integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==
+
+unicode-property-aliases-ecmascript@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8"
+ integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==
union-value@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4"
- integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
+ integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
dependencies:
arr-union "^3.1.0"
get-value "^2.0.6"
is-extendable "^0.1.1"
- set-value "^0.4.3"
+ set-value "^2.0.1"
universalify@^0.1.0:
version "0.1.2"
@@ -6354,6 +7028,7 @@ universalify@^0.1.0:
unpipe@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+ integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
unset-value@^1.0.0:
version "1.0.0"
@@ -6364,9 +7039,9 @@ unset-value@^1.0.0:
isobject "^3.0.0"
uri-js@^4.2.2:
- version "4.2.2"
- resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
- integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+ integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
dependencies:
punycode "^2.1.0"
@@ -6375,22 +7050,30 @@ urix@^0.1.0:
resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
+use-subscription@^1.0.0:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/use-subscription/-/use-subscription-1.5.1.tgz#73501107f02fad84c6dd57965beb0b75c68c42d1"
+ integrity sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA==
+ dependencies:
+ object-assign "^4.1.1"
+
use@^3.1.0:
version "3.1.1"
resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
+username@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/username/-/username-5.1.0.tgz#a7f9325adce2d0166448cdd55d4985b1360f2508"
+ integrity sha512-PCKbdWw85JsYMvmCv5GH3kXmM66rCd9m1hBEDutPNv94b/pqCMT4NtcKyeWYvLFiE8b+ha1Jdl8XAaUdPn5QTg==
+ dependencies:
+ execa "^1.0.0"
+ mem "^4.3.0"
+
util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
-
-util.promisify@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030"
- integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==
- dependencies:
- define-properties "^1.1.2"
- object.getownpropertydescriptors "^2.0.3"
+ integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
utils-merge@1.0.1:
version "1.0.1"
@@ -6398,32 +7081,45 @@ utils-merge@1.0.1:
integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
uuid@^3.3.2:
- version "3.3.2"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
- integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
+ integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
v8-compile-cache@^2.0.3:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e"
- integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
+ integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==
+
+v8-to-istanbul@^4.1.3:
+ version "4.1.4"
+ resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-4.1.4.tgz#b97936f21c0e2d9996d4985e5c5156e9d4e49cd6"
+ integrity sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ==
+ dependencies:
+ "@types/istanbul-lib-coverage" "^2.0.1"
+ convert-source-map "^1.6.0"
+ source-map "^0.7.3"
validate-npm-package-license@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
+ integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
dependencies:
- spdx-correct "~1.0.0"
- spdx-expression-parse "~1.0.0"
+ spdx-correct "^3.0.0"
+ spdx-expression-parse "^3.0.0"
vary@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
-verror@1.3.6:
- version "1.3.6"
- resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c"
+verror@1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
+ integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
dependencies:
- extsprintf "1.0.2"
+ assert-plus "^1.0.0"
+ core-util-is "1.0.2"
+ extsprintf "^1.2.0"
vlq@^1.0.0:
version "1.0.1"
@@ -6431,17 +7127,27 @@ vlq@^1.0.0:
integrity sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==
w3c-hr-time@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045"
- integrity sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd"
+ integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==
dependencies:
- browser-process-hrtime "^0.1.2"
+ browser-process-hrtime "^1.0.0"
+
+w3c-xmlserializer@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz#30485ca7d70a6fd052420a3d12fd90e6339ce794"
+ integrity sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==
+ dependencies:
+ domexception "^1.0.1"
+ webidl-conversions "^4.0.2"
+ xml-name-validator "^3.0.0"
walker@^1.0.7, walker@~1.0.5:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb"
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f"
+ integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==
dependencies:
- makeerror "1.0.x"
+ makeerror "1.0.12"
wcwidth@^1.0.1:
version "1.0.1"
@@ -6450,89 +7156,89 @@ wcwidth@^1.0.1:
dependencies:
defaults "^1.0.3"
+webidl-conversions@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
+ integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=
+
webidl-conversions@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==
-whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3:
+whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0"
integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==
dependencies:
iconv-lite "0.4.24"
-whatwg-fetch@>=0.10.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-1.1.1.tgz#ac3c9d39f320c6dce5339969d054ef43dd333319"
+whatwg-fetch@>=0.10.0, whatwg-fetch@^3.0.0:
+ version "3.6.2"
+ resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c"
+ integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==
-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==
-
-whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0:
+whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
-whatwg-url@^6.4.1:
- version "6.5.0"
- resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8"
- integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==
+whatwg-url@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
+ integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0=
+ dependencies:
+ tr46 "~0.0.3"
+ webidl-conversions "^3.0.0"
+
+whatwg-url@^7.0.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06"
+ integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==
dependencies:
lodash.sortby "^4.7.0"
tr46 "^1.0.1"
webidl-conversions "^4.0.2"
-whatwg-url@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd"
- integrity sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==
+which-boxed-primitive@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
+ integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==
dependencies:
- lodash.sortby "^4.7.0"
- tr46 "^1.0.1"
- webidl-conversions "^4.0.2"
+ is-bigint "^1.0.1"
+ is-boolean-object "^1.1.0"
+ is-number-object "^1.0.4"
+ is-string "^1.0.5"
+ is-symbol "^1.0.3"
which-module@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
-which@^1.2.9:
- version "1.2.12"
- resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192"
- dependencies:
- isexe "^1.1.1"
-
-which@^1.3.0:
+which@^1.2.9, which@^1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
dependencies:
isexe "^2.0.0"
-wide-align@^1.1.0:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
- integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
+which@^2.0.1, which@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
dependencies:
- string-width "^1.0.2 || 2"
+ isexe "^2.0.0"
-wordwrap@^1.0.0, wordwrap@~1.0.0:
+word-wrap@~1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
+ integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
+
+wordwrap@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
-
-wordwrap@~0.0.2:
- version "0.0.3"
- resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
-
-wrap-ansi@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
- dependencies:
- string-width "^1.0.1"
- strip-ansi "^3.0.1"
+ integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=
wrap-ansi@^5.1.0:
version "5.1.0"
@@ -6543,26 +7249,29 @@ wrap-ansi@^5.1.0:
string-width "^3.0.0"
strip-ansi "^5.0.0"
+wrap-ansi@^6.2.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
+ integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
-write-file-atomic@2.4.1:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.1.tgz#d0b05463c188ae804396fd5ab2a370062af87529"
- integrity sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==
+write-file-atomic@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8"
+ integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==
dependencies:
- graceful-fs "^4.1.11"
imurmurhash "^0.1.4"
+ is-typedarray "^1.0.0"
signal-exit "^3.0.2"
-
-write-file-atomic@^1.2.0:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.1.tgz#7d45ba32316328dd1ec7d90f60ebc0d845bb759a"
- dependencies:
- graceful-fs "^4.1.11"
- imurmurhash "^0.1.4"
- slide "^1.1.5"
+ typedarray-to-buffer "^3.1.5"
write@1.0.3:
version "1.0.3"
@@ -6571,14 +7280,7 @@ write@1.0.3:
dependencies:
mkdirp "^0.5.1"
-ws@^1.1.0:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.2.tgz#8a244fa052401e08c9886cf44a85189e1fd4067f"
- dependencies:
- options ">=0.0.5"
- ultron "1.0.x"
-
-ws@^1.1.5:
+ws@^1.1.0, ws@^1.1.5:
version "1.1.5"
resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51"
integrity sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==
@@ -6586,26 +7288,15 @@ ws@^1.1.5:
options ">=0.0.5"
ultron "1.0.x"
-ws@^3.3.1:
- version "3.3.3"
- resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2"
- integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==
- dependencies:
- async-limiter "~1.0.0"
- safe-buffer "~5.1.0"
- ultron "~1.1.0"
-
-ws@^5.2.0:
- version "5.2.2"
- resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f"
- integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==
- dependencies:
- async-limiter "~1.0.0"
+ws@^7, ws@^7.0.0:
+ version "7.5.6"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.6.tgz#e59fc509fb15ddfb65487ee9765c5a51dec5fe7b"
+ integrity sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==
xcode@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/xcode/-/xcode-2.0.0.tgz#134f1f94c26fbfe8a9aaa9724bfb2772419da1a2"
- integrity sha512-5xF6RCjAdDEiEsbbZaS/gBRt3jZ/177otZcpoLCjGN/u1LrfgH7/Sgeeavpr/jELpyDqN2im3AKosl2G2W8hfw==
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/xcode/-/xcode-2.1.0.tgz#bab64a7e954bb50ca8d19da7e09531c65a43ecfe"
+ integrity sha512-uCrmPITrqTEzhn0TtT57fJaNaw8YJs1aCzs+P/QqxsDbvPZSv7XMPPwXrKvHtD6pLjBM/NaVwraWJm8q83Y4iQ==
dependencies:
simple-plist "^1.0.0"
uuid "^3.3.2"
@@ -6615,11 +7306,23 @@ xml-name-validator@^3.0.0:
resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
+xml-parser@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/xml-parser/-/xml-parser-1.2.1.tgz#c31f4c34f2975db82ad013222120592736156fcd"
+ integrity sha1-wx9MNPKXXbgq0BMiISBZJzYVb80=
+ dependencies:
+ debug "^2.2.0"
+
xmlbuilder@^9.0.7:
version "9.0.7"
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d"
integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=
+xmlchars@^2.1.1:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
+ integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
+
xmldoc@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/xmldoc/-/xmldoc-1.1.2.tgz#6666e029fe25470d599cd30e23ff0d1ed50466d7"
@@ -6627,84 +7330,66 @@ xmldoc@^1.1.2:
dependencies:
sax "^1.2.1"
-xmldom@0.1.x:
- version "0.1.27"
- resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9"
+xpath@^0.0.27:
+ version "0.0.27"
+ resolved "https://registry.yarnpkg.com/xpath/-/xpath-0.0.27.tgz#dd3421fbdcc5646ac32c48531b4d7e9d0c2cfa92"
+ integrity sha512-fg03WRxtkCV6ohClePNAECYsmpKKTv5L8y/X3Dn1hQrec3POx2jHZ/0P2qQ6HvsrU1BmeqXcof3NGGueG6LxwQ==
xpipe@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/xpipe/-/xpipe-1.0.5.tgz#8dd8bf45fc3f7f55f0e054b878f43a62614dafdf"
integrity sha1-jdi/Rfw/f1Xw4FS4ePQ6YmFNr98=
+xregexp@^4.3.0:
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.4.1.tgz#c84a88fa79e9ab18ca543959712094492185fe65"
+ integrity sha512-2u9HwfadaJaY9zHtRRnH6BY6CQVNQKkYm3oLtC9gJXXzfsbACg5X5e4EZZGVAH+YIfa+QA9lsFQTTe3HURF3ag==
+ dependencies:
+ "@babel/runtime-corejs3" "^7.12.1"
+
xtend@~4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
+ integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
-y18n@^3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
+y18n@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf"
+ integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==
-"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0:
+yallist@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
+ integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
+
+yallist@^4.0.0:
version "4.0.0"
- resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
- integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
+ integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
-yallist@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.0.0.tgz#306c543835f09ee1a4cb23b7bce9ab341c91cdd4"
-
-yallist@^3.0.0, yallist@^3.0.3:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9"
- integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==
-
-yargs-parser@^11.1.1:
- version "11.1.1"
- resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4"
- integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==
+yargs-parser@^15.0.1:
+ version "15.0.3"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.3.tgz#316e263d5febe8b38eef61ac092b33dfcc9b1115"
+ integrity sha512-/MVEVjTXy/cGAjdtQf8dW3V9b97bPN7rNn8ETj6BmAQL7ibC7O1Q9SPJbGjgh3SlwoBNXMzj/ZGIj8mBgl12YA==
dependencies:
camelcase "^5.0.0"
decamelize "^1.2.0"
-yargs-parser@^13.1.1:
- version "13.1.1"
- resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0"
- integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==
+yargs-parser@^18.1.2:
+ version "18.1.3"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
+ integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==
dependencies:
camelcase "^5.0.0"
decamelize "^1.2.0"
-yargs-parser@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9"
- integrity sha1-jQrELxbqVd69MyyvTEA4s+P139k=
- dependencies:
- camelcase "^4.1.0"
-
-yargs@^12.0.5:
- version "12.0.5"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13"
- integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==
- dependencies:
- cliui "^4.0.0"
- decamelize "^1.2.0"
- find-up "^3.0.0"
- get-caller-file "^1.0.1"
- os-locale "^3.0.0"
- require-directory "^2.1.1"
- require-main-filename "^1.0.1"
- set-blocking "^2.0.0"
- string-width "^2.0.0"
- which-module "^2.0.0"
- y18n "^3.2.1 || ^4.0.0"
- yargs-parser "^11.1.1"
-
-yargs@^13.3.0:
- version "13.3.0"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83"
- integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==
+yargs@^14.2.0:
+ version "14.2.3"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414"
+ integrity sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==
dependencies:
cliui "^5.0.0"
+ decamelize "^1.2.0"
find-up "^3.0.0"
get-caller-file "^2.0.1"
require-directory "^2.1.1"
@@ -6713,23 +7398,21 @@ yargs@^13.3.0:
string-width "^3.0.0"
which-module "^2.0.0"
y18n "^4.0.0"
- yargs-parser "^13.1.1"
+ yargs-parser "^15.0.1"
-yargs@^9.0.0:
- version "9.0.1"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-9.0.1.tgz#52acc23feecac34042078ee78c0c007f5085db4c"
- integrity sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=
+yargs@^15.1.0, yargs@^15.3.1:
+ version "15.4.1"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8"
+ integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==
dependencies:
- camelcase "^4.1.0"
- cliui "^3.2.0"
- decamelize "^1.1.1"
- get-caller-file "^1.0.1"
- os-locale "^2.0.0"
- read-pkg-up "^2.0.0"
+ cliui "^6.0.0"
+ decamelize "^1.2.0"
+ find-up "^4.1.0"
+ get-caller-file "^2.0.1"
require-directory "^2.1.1"
- require-main-filename "^1.0.1"
+ require-main-filename "^2.0.0"
set-blocking "^2.0.0"
- string-width "^2.0.0"
+ string-width "^4.2.0"
which-module "^2.0.0"
- y18n "^3.2.1"
- yargs-parser "^7.0.0"
+ y18n "^4.0.0"
+ yargs-parser "^18.1.2"
diff --git a/examples/video-caching/android/app/build.gradle b/examples/video-caching/android/app/build.gradle
index 7a6b5205..c0195dab 100644
--- a/examples/video-caching/android/app/build.gradle
+++ b/examples/video-caching/android/app/build.gradle
@@ -94,12 +94,12 @@ def enableSeparateBuildPerCPUArchitecture = false
def enableProguardInReleaseBuilds = false
android {
- compileSdkVersion 23
- buildToolsVersion "23.0.1"
+ compileSdkVersion 31
+ buildToolsVersion "30.0.2"
defaultConfig {
applicationId "com.videocaching"
- minSdkVersion 16
+ minSdkVersion 21
targetSdkVersion 22
versionCode 1
versionName "1.0"
diff --git a/examples/video-caching/android/app/src/main/AndroidManifest.xml b/examples/video-caching/android/app/src/main/AndroidManifest.xml
index c0050352..51b666bc 100644
--- a/examples/video-caching/android/app/src/main/AndroidManifest.xml
+++ b/examples/video-caching/android/app/src/main/AndroidManifest.xml
@@ -7,7 +7,7 @@
?
+ let contentId: String?
+ let certificateUrl: String?
+ let base64Certificate: Bool?
+
+ let json: NSDictionary?
+
+ init(_ json: NSDictionary!) {
+ guard json != nil else {
+ self.json = nil
+ self.type = nil
+ self.licenseServer = nil
+ self.contentId = nil
+ self.certificateUrl = nil
+ self.base64Certificate = nil
+ self.headers = nil
+ return
+ }
+ self.json = json
+ self.type = json["type"] as? String
+ self.licenseServer = json["licenseServer"] as? String
+ self.contentId = json["contentId"] as? String
+ self.certificateUrl = json["certificateUrl"] as? String
+ self.base64Certificate = json["base64Certificate"] as? Bool
+ self.headers = json["headers"] as? Dictionary
+ }
+}
diff --git a/ios/Video/DataStructures/SelectedTrackCriteria.swift b/ios/Video/DataStructures/SelectedTrackCriteria.swift
new file mode 100644
index 00000000..7d97b8f2
--- /dev/null
+++ b/ios/Video/DataStructures/SelectedTrackCriteria.swift
@@ -0,0 +1,18 @@
+struct SelectedTrackCriteria {
+ let type: String
+ let value: Any?
+
+ let json: NSDictionary?
+
+ init(_ json: NSDictionary!) {
+ guard json != nil else {
+ self.json = nil
+ self.type = ""
+ self.value = nil
+ return
+ }
+ self.json = json
+ self.type = json["type"] as? String ?? ""
+ self.value = json["value"]
+ }
+}
diff --git a/ios/Video/DataStructures/TextTrack.swift b/ios/Video/DataStructures/TextTrack.swift
new file mode 100644
index 00000000..b0bdad80
--- /dev/null
+++ b/ios/Video/DataStructures/TextTrack.swift
@@ -0,0 +1,25 @@
+
+struct TextTrack {
+ let type: String
+ let language: String
+ let title: String
+ let uri: String
+
+ let json: NSDictionary?
+
+ init(_ json: NSDictionary!) {
+ guard json != nil else {
+ self.json = nil
+ self.type = ""
+ self.language = ""
+ self.title = ""
+ self.uri = ""
+ return
+ }
+ self.json = json
+ self.type = json["type"] as? String ?? ""
+ self.language = json["language"] as? String ?? ""
+ self.title = json["title"] as? String ?? ""
+ self.uri = json["uri"] as? String ?? ""
+ }
+}
diff --git a/ios/Video/DataStructures/VideoSource.swift b/ios/Video/DataStructures/VideoSource.swift
new file mode 100644
index 00000000..20ab7158
--- /dev/null
+++ b/ios/Video/DataStructures/VideoSource.swift
@@ -0,0 +1,31 @@
+
+struct VideoSource {
+ let type: String?
+ let uri: String?
+ let isNetwork: Bool
+ let isAsset: Bool
+ let shouldCache: Bool
+ let requestHeaders: Dictionary?
+
+ let json: NSDictionary?
+
+ init(_ json: NSDictionary!) {
+ guard json != nil else {
+ self.json = nil
+ self.type = nil
+ self.uri = nil
+ self.isNetwork = false
+ self.isAsset = false
+ self.shouldCache = false
+ self.requestHeaders = nil
+ return
+ }
+ self.json = json
+ self.type = json["type"] as? String
+ self.uri = json["uri"] as? String
+ self.isNetwork = json["isNetwork"] as? Bool ?? false
+ self.isAsset = json["isAsset"] as? Bool ?? false
+ self.shouldCache = json["shouldCache"] as? Bool ?? false
+ self.requestHeaders = json["requestHeaders"] as? Dictionary
+ }
+}
diff --git a/ios/Video/Features/RCTPictureInPicture.swift b/ios/Video/Features/RCTPictureInPicture.swift
new file mode 100644
index 00000000..4525df0b
--- /dev/null
+++ b/ios/Video/Features/RCTPictureInPicture.swift
@@ -0,0 +1,75 @@
+import AVFoundation
+import AVKit
+import MediaAccessibility
+import React
+import Foundation
+
+#if TARGET_OS_IOS
+class RCTPictureInPicture: NSObject, AVPictureInPictureControllerDelegate {
+ private var _onPictureInPictureStatusChanged: RCTDirectEventBlock?
+ private var _onRestoreUserInterfaceForPictureInPictureStop: RCTDirectEventBlock?
+ private var _restoreUserInterfaceForPIPStopCompletionHandler:((Bool) -> Void)? = nil
+ private var _pipController:AVPictureInPictureController?
+ private var _isActive:Bool = false
+
+ init(_ onPictureInPictureStatusChanged: @escaping RCTDirectEventBlock, _ onRestoreUserInterfaceForPictureInPictureStop: @escaping RCTDirectEventBlock) {
+ _onPictureInPictureStatusChanged = onPictureInPictureStatusChanged
+ _onRestoreUserInterfaceForPictureInPictureStop = onRestoreUserInterfaceForPictureInPictureStop
+ }
+
+ func pictureInPictureControllerDidStartPictureInPicture(_ pictureInPictureController: AVPictureInPictureController) {
+ guard let _onPictureInPictureStatusChanged = _onPictureInPictureStatusChanged else { return }
+
+ _onPictureInPictureStatusChanged([ "isActive": NSNumber(value: true)])
+ }
+
+ func pictureInPictureControllerDidStopPictureInPicture(_ pictureInPictureController: AVPictureInPictureController) {
+ guard let _onPictureInPictureStatusChanged = _onPictureInPictureStatusChanged else { return }
+
+ _onPictureInPictureStatusChanged([ "isActive": NSNumber(value: false)])
+ }
+
+ func pictureInPictureController(_ pictureInPictureController: AVPictureInPictureController, restoreUserInterfaceForPictureInPictureStopWithCompletionHandler completionHandler: @escaping (Bool) -> Void) {
+
+ assert(_restoreUserInterfaceForPIPStopCompletionHandler == nil, "restoreUserInterfaceForPIPStopCompletionHandler was not called after picture in picture was exited.")
+
+ guard let _onRestoreUserInterfaceForPictureInPictureStop = _onRestoreUserInterfaceForPictureInPictureStop else { return }
+
+ _onRestoreUserInterfaceForPictureInPictureStop([:])
+
+ _restoreUserInterfaceForPIPStopCompletionHandler = completionHandler
+ }
+
+ func setRestoreUserInterfaceForPIPStopCompletionHandler(_ restore:Bool) {
+ guard let _restoreUserInterfaceForPIPStopCompletionHandler = _restoreUserInterfaceForPIPStopCompletionHandler else { return }
+ _restoreUserInterfaceForPIPStopCompletionHandler(restore)
+ self._restoreUserInterfaceForPIPStopCompletionHandler = nil
+ }
+
+ func setupPipController(_ playerLayer: AVPlayerLayer?) {
+ guard playerLayer != nil && AVPictureInPictureController.isPictureInPictureSupported() && _isActive else { return }
+ // Create new controller passing reference to the AVPlayerLayer
+ _pipController = AVPictureInPictureController(playerLayer:playerLayer!)
+ _pipController?.delegate = self
+ }
+
+ func setPictureInPicture(_ isActive:Bool) {
+ if _isActive == isActive {
+ return
+ }
+ _isActive = isActive
+
+ guard let _pipController = _pipController else { return }
+
+ if _isActive && !_pipController.isPictureInPictureActive {
+ DispatchQueue.main.async(execute: {
+ _pipController.startPictureInPicture()
+ })
+ } else if !_isActive && _pipController.isPictureInPictureActive {
+ DispatchQueue.main.async(execute: {
+ _pipController.stopPictureInPicture()
+ })
+ }
+ }
+}
+#endif
diff --git a/ios/Video/Features/RCTPlayerObserver.swift b/ios/Video/Features/RCTPlayerObserver.swift
new file mode 100644
index 00000000..68fc56dd
--- /dev/null
+++ b/ios/Video/Features/RCTPlayerObserver.swift
@@ -0,0 +1,207 @@
+import AVFoundation
+import AVKit
+import Foundation
+
+@objc
+protocol RCTPlayerObserverHandlerObjc {
+ func handleDidFailToFinishPlaying(notification:NSNotification!)
+ func handlePlaybackStalled(notification:NSNotification!)
+ func handlePlayerItemDidReachEnd(notification:NSNotification!)
+ // unused
+// func handleAVPlayerAccess(notification:NSNotification!)
+}
+
+protocol RCTPlayerObserverHandler: RCTPlayerObserverHandlerObjc {
+ func handleTimeUpdate(time:CMTime)
+ func handleReadyForDisplay(changeObject: Any, change:NSKeyValueObservedChange)
+ func handleTimeMetadataChange(playerItem:AVPlayerItem, change:NSKeyValueObservedChange<[AVMetadataItem]?>)
+ func handlePlayerItemStatusChange(playerItem:AVPlayerItem, change:NSKeyValueObservedChange)
+ func handlePlaybackBufferKeyEmpty(playerItem:AVPlayerItem, change:NSKeyValueObservedChange)
+ func handlePlaybackLikelyToKeepUp(playerItem:AVPlayerItem, change:NSKeyValueObservedChange)
+ func handlePlaybackRateChange(player: AVPlayer, change: NSKeyValueObservedChange)
+ func handleExternalPlaybackActiveChange(player: AVPlayer, change: NSKeyValueObservedChange)
+ func handleViewControllerOverlayViewFrameChange(overlayView:UIView, change:NSKeyValueObservedChange)
+}
+
+class RCTPlayerObserver: NSObject {
+
+ var _handlers: RCTPlayerObserverHandler!
+
+ var player:AVPlayer? {
+ willSet {
+ removePlayerObservers()
+ removePlayerTimeObserver()
+ }
+ didSet {
+ if player != nil {
+ addPlayerObservers()
+ addPlayerTimeObserver()
+ }
+ }
+ }
+ var playerItem:AVPlayerItem? {
+ willSet {
+ removePlayerItemObservers()
+ }
+ didSet {
+ if playerItem != nil {
+ addPlayerItemObservers()
+ }
+ }
+ }
+ var playerViewController:AVPlayerViewController? {
+ willSet {
+ removePlayerViewControllerObservers()
+ }
+ didSet {
+ if playerViewController != nil {
+ addPlayerViewControllerObservers()
+ }
+ }
+ }
+ var playerLayer:AVPlayerLayer? {
+ willSet {
+ removePlayerLayerObserver()
+ }
+ didSet {
+ if playerLayer != nil {
+ addPlayerLayerObserver()
+ }
+ }
+ }
+
+ private var _progressUpdateInterval:TimeInterval = 250
+ private var _timeObserver:Any?
+
+ private var _playerRateChangeObserver:NSKeyValueObservation?
+ private var _playerExpernalPlaybackActiveObserver:NSKeyValueObservation?
+ private var _playerItemStatusObserver:NSKeyValueObservation?
+ private var _playerPlaybackBufferEmptyObserver:NSKeyValueObservation?
+ private var _playerPlaybackLikelyToKeepUpObserver:NSKeyValueObservation?
+ private var _playerTimedMetadataObserver:NSKeyValueObservation?
+ private var _playerViewControllerReadyForDisplayObserver:NSKeyValueObservation?
+ private var _playerLayerReadyForDisplayObserver:NSKeyValueObservation?
+ private var _playerViewControllerOverlayFrameObserver:NSKeyValueObservation?
+
+ deinit {
+ NotificationCenter.default.removeObserver(_handlers)
+ }
+
+ func addPlayerObservers() {
+ guard let player = player else {
+ return
+ }
+
+ _playerRateChangeObserver = player.observe(\.rate, changeHandler: _handlers.handlePlaybackRateChange)
+ _playerExpernalPlaybackActiveObserver = player.observe(\.isExternalPlaybackActive, changeHandler: _handlers.handleExternalPlaybackActiveChange)
+ }
+
+ func removePlayerObservers() {
+ _playerRateChangeObserver?.invalidate()
+ _playerExpernalPlaybackActiveObserver?.invalidate()
+ }
+
+ func addPlayerItemObservers() {
+ guard let playerItem = playerItem else { return }
+
+ _playerItemStatusObserver = playerItem.observe(\.status, options: [.new, .old], changeHandler: _handlers.handlePlayerItemStatusChange)
+ _playerPlaybackBufferEmptyObserver = playerItem.observe(\.isPlaybackBufferEmpty, options: [.new, .old], changeHandler: _handlers.handlePlaybackBufferKeyEmpty)
+ _playerPlaybackLikelyToKeepUpObserver = playerItem.observe(\.isPlaybackLikelyToKeepUp, options: [.new, .old], changeHandler: _handlers.handlePlaybackLikelyToKeepUp)
+ _playerTimedMetadataObserver = playerItem.observe(\.timedMetadata, options: [.new], changeHandler: _handlers.handleTimeMetadataChange)
+ }
+
+ func removePlayerItemObservers() {
+ _playerItemStatusObserver?.invalidate()
+ _playerPlaybackBufferEmptyObserver?.invalidate()
+ _playerPlaybackLikelyToKeepUpObserver?.invalidate()
+ _playerTimedMetadataObserver?.invalidate()
+ }
+
+ func addPlayerViewControllerObservers() {
+ guard let playerViewController = playerViewController else { return }
+
+ _playerViewControllerReadyForDisplayObserver = playerViewController.observe(\.isReadyForDisplay, options: [.new], changeHandler: _handlers.handleReadyForDisplay)
+
+ _playerViewControllerOverlayFrameObserver = playerViewController.contentOverlayView?.observe(\.frame, options: [.new, .old], changeHandler: _handlers.handleViewControllerOverlayViewFrameChange)
+ }
+
+ func removePlayerViewControllerObservers() {
+ _playerViewControllerReadyForDisplayObserver?.invalidate()
+ _playerViewControllerOverlayFrameObserver?.invalidate()
+ }
+
+ func addPlayerLayerObserver() {
+ _playerLayerReadyForDisplayObserver = playerLayer?.observe(\.isReadyForDisplay, options: [.new], changeHandler: _handlers.handleReadyForDisplay)
+ }
+
+ func removePlayerLayerObserver() {
+ _playerLayerReadyForDisplayObserver?.invalidate()
+ }
+
+ func addPlayerTimeObserver() {
+ removePlayerTimeObserver()
+ let progressUpdateIntervalMS:Float64 = _progressUpdateInterval / 1000
+ // @see endScrubbing in AVPlayerDemoPlaybackViewController.m
+ // of https://developer.apple.com/library/ios/samplecode/AVPlayerDemo/Introduction/Intro.html
+ _timeObserver = player?.addPeriodicTimeObserver(
+ forInterval: CMTimeMakeWithSeconds(progressUpdateIntervalMS, preferredTimescale: Int32(NSEC_PER_SEC)),
+ queue:nil,
+ using:_handlers.handleTimeUpdate
+ )
+ }
+
+ /* Cancels the previously registered time observer. */
+ func removePlayerTimeObserver() {
+ if _timeObserver != nil {
+ player?.removeTimeObserver(_timeObserver)
+ _timeObserver = nil
+ }
+ }
+
+ func addTimeObserverIfNotSet() {
+ if (_timeObserver == nil) {
+ addPlayerTimeObserver()
+ }
+ }
+
+ func replaceTimeObserverIfSet(_ newUpdateInterval:Float64? = nil) {
+ if let newUpdateInterval = newUpdateInterval {
+ _progressUpdateInterval = newUpdateInterval
+ }
+ if (_timeObserver != nil) {
+ addPlayerTimeObserver()
+ }
+ }
+
+ func attachPlayerEventListeners() {
+
+ NotificationCenter.default.removeObserver(_handlers,
+ name:NSNotification.Name.AVPlayerItemDidPlayToEndTime,
+ object:player?.currentItem)
+ NotificationCenter.default.addObserver(_handlers,
+ selector:#selector(RCTPlayerObserverHandler.handlePlayerItemDidReachEnd(notification:)),
+ name:NSNotification.Name.AVPlayerItemDidPlayToEndTime,
+ object:player?.currentItem)
+
+ NotificationCenter.default.removeObserver(_handlers,
+ name:NSNotification.Name.AVPlayerItemPlaybackStalled,
+ object:nil)
+ NotificationCenter.default.addObserver(_handlers,
+ selector:#selector(RCTPlayerObserverHandler.handlePlaybackStalled(notification:)),
+ name:NSNotification.Name.AVPlayerItemPlaybackStalled,
+ object:nil)
+ NotificationCenter.default.removeObserver(_handlers,
+ name: NSNotification.Name.AVPlayerItemFailedToPlayToEndTime,
+ object:nil)
+ NotificationCenter.default.addObserver(_handlers,
+ selector:#selector(RCTPlayerObserverHandler.handleDidFailToFinishPlaying(notification:)),
+ name: NSNotification.Name.AVPlayerItemFailedToPlayToEndTime,
+ object:nil)
+ }
+
+ func clearPlayer() {
+ player = nil
+ playerItem = nil
+ NotificationCenter.default.removeObserver(_handlers)
+ }
+}
diff --git a/ios/Video/Features/RCTPlayerOperations.swift b/ios/Video/Features/RCTPlayerOperations.swift
new file mode 100644
index 00000000..cd0ddfec
--- /dev/null
+++ b/ios/Video/Features/RCTPlayerOperations.swift
@@ -0,0 +1,226 @@
+import AVFoundation
+import MediaAccessibility
+import Promises
+
+let RCTVideoUnset = -1
+
+/*!
+ * Collection of mutating functions
+ */
+enum RCTPlayerOperations {
+
+ static func setSideloadedText(player:AVPlayer?, textTracks:[TextTrack]?, criteria:SelectedTrackCriteria?) {
+ let type = criteria?.type
+ let textTracks:[TextTrack]! = textTracks ?? RCTVideoUtils.getTextTrackInfo(player)
+ let trackCount:Int! = player?.currentItem?.tracks.count ?? 0
+
+ // The first few tracks will be audio & video track
+ var firstTextIndex:Int = 0
+ for i in 0..<(trackCount) {
+ if player?.currentItem?.tracks[i].assetTrack?.hasMediaCharacteristic(.legible) ?? false {
+ firstTextIndex = i
+ break
+ }
+ }
+
+ var selectedTrackIndex:Int = RCTVideoUnset
+
+ if (type == "disabled") {
+ // Select the last text index which is the disabled text track
+ selectedTrackIndex = trackCount - firstTextIndex
+ } else if (type == "language") {
+ let selectedValue = criteria?.value as? String
+ for i in 0.. index {
+ selectedTrackIndex = index
+ }
+ }
+ }
+
+ // in the situation that a selected text track is not available (eg. specifies a textTrack not available)
+ if (type != "disabled") && selectedTrackIndex == RCTVideoUnset {
+ let captioningMediaCharacteristics = MACaptionAppearanceCopyPreferredCaptioningMediaCharacteristics(.user)
+ let captionSettings = captioningMediaCharacteristics as? [AnyHashable]
+ if ((captionSettings?.contains(AVMediaCharacteristic.transcribesSpokenDialogForAccessibility)) != nil) {
+ selectedTrackIndex = 0 // If we can't find a match, use the first available track
+ let systemLanguage = NSLocale.preferredLanguages.first
+ for i in 0.. index {
+ mediaOption = group.options[index]
+ }
+ }
+ } else { // default. invalid type or "system"
+ #if TARGET_OS_TV
+ // Do noting. Fix for tvOS native audio menu language selector
+ #else
+ player?.currentItem?.selectMediaOptionAutomatically(in: group)
+ return
+ #endif
+ }
+
+ #if TARGET_OS_TV
+ // Do noting. Fix for tvOS native audio menu language selector
+ #else
+ // If a match isn't found, option will be nil and text tracks will be disabled
+ player?.currentItem?.select(mediaOption, in:group)
+ #endif
+ }
+
+ static func setMediaSelectionTrackForCharacteristic(player:AVPlayer?, characteristic:AVMediaCharacteristic, criteria:SelectedTrackCriteria?) {
+ let type = criteria?.type
+ let group:AVMediaSelectionGroup! = player?.currentItem?.asset.mediaSelectionGroup(forMediaCharacteristic: characteristic)
+ var mediaOption:AVMediaSelectionOption!
+
+ if (type == "disabled") {
+ // Do nothing. We want to ensure option is nil
+ } else if (type == "language") || (type == "title") {
+ let value = criteria?.value as? String
+ for i in 0.. index {
+ mediaOption = group.options[index]
+ }
+ }
+ } else if let group = group { // default. invalid type or "system"
+ player?.currentItem?.selectMediaOptionAutomatically(in: group)
+ return
+ }
+
+ if let group = group {
+ // If a match isn't found, option will be nil and text tracks will be disabled
+ player?.currentItem?.select(mediaOption, in:group)
+ }
+
+ }
+
+ static func seek(player: AVPlayer, playerItem:AVPlayerItem, paused:Bool, seekTime:Float, seekTolerance:Float) -> Promise {
+ let timeScale:Int = 1000
+ let cmSeekTime:CMTime = CMTimeMakeWithSeconds(Float64(seekTime), preferredTimescale: Int32(timeScale))
+ let current:CMTime = playerItem.currentTime()
+ let tolerance:CMTime = CMTimeMake(value: Int64(seekTolerance), timescale: Int32(timeScale))
+
+ return Promise(on: .global()) { fulfill, reject in
+ guard CMTimeCompare(current, cmSeekTime) != 0 else {
+ reject(NSError(domain: "", code: 0, userInfo: nil))
+ return
+ }
+ if !paused { player.pause() }
+
+ player.seek(to: cmSeekTime, toleranceBefore:tolerance, toleranceAfter:tolerance, completionHandler:{ (finished:Bool) in
+ fulfill(finished)
+ })
+ }
+ }
+
+ static func configureAudio(ignoreSilentSwitch:String, mixWithOthers:String) {
+ let session:AVAudioSession! = AVAudioSession.sharedInstance()
+ var category:AVAudioSession.Category? = nil
+ var options:AVAudioSession.CategoryOptions? = nil
+
+ if (ignoreSilentSwitch == "ignore") {
+ category = AVAudioSession.Category.playback
+ } else if (ignoreSilentSwitch == "obey") {
+ category = AVAudioSession.Category.ambient
+ }
+
+ if (mixWithOthers == "mix") {
+ options = .mixWithOthers
+ } else if (mixWithOthers == "duck") {
+ options = .duckOthers
+ }
+
+ if let category = category, let options = options {
+ do {
+ try session.setCategory(category, options: options)
+ } catch {
+ }
+ } else if let category = category, options == nil {
+ do {
+ try session.setCategory(category)
+ } catch {
+ }
+ } else if category == nil, let options = options {
+ do {
+ try session.setCategory(session.category, options: options)
+ } catch {
+ }
+ }
+ }
+}
diff --git a/ios/Video/Features/RCTResourceLoaderDelegate.swift b/ios/Video/Features/RCTResourceLoaderDelegate.swift
new file mode 100644
index 00000000..e1f11528
--- /dev/null
+++ b/ios/Video/Features/RCTResourceLoaderDelegate.swift
@@ -0,0 +1,167 @@
+import AVFoundation
+import Promises
+
+class RCTResourceLoaderDelegate: NSObject, AVAssetResourceLoaderDelegate, URLSessionDelegate {
+
+ private var _loadingRequest:AVAssetResourceLoadingRequest?
+ private var _requestingCertificate:Bool = false
+ private var _requestingCertificateErrored:Bool = false
+ private var _drm: DRMParams?
+ private var _localSourceEncryptionKeyScheme: String?
+ private var _reactTag: NSNumber?
+ private var _onVideoError: RCTDirectEventBlock?
+ private var _onGetLicense: RCTDirectEventBlock?
+
+
+ init(
+ asset: AVURLAsset,
+ drm: DRMParams?,
+ localSourceEncryptionKeyScheme: String?,
+ onVideoError: RCTDirectEventBlock?,
+ onGetLicense: RCTDirectEventBlock?,
+ reactTag: NSNumber
+ ) {
+ super.init()
+ let queue = DispatchQueue(label: "assetQueue")
+ asset.resourceLoader.setDelegate(self, queue: queue)
+ _reactTag = reactTag
+ _onVideoError = onVideoError
+ _onGetLicense = onGetLicense
+ _drm = drm
+ _localSourceEncryptionKeyScheme = localSourceEncryptionKeyScheme
+ }
+
+ deinit {
+ _loadingRequest?.finishLoading()
+ }
+
+ func resourceLoader(_ resourceLoader:AVAssetResourceLoader, shouldWaitForRenewalOfRequestedResource renewalRequest:AVAssetResourceRenewalRequest) -> Bool {
+ return loadingRequestHandling(renewalRequest)
+ }
+
+ func resourceLoader(_ resourceLoader:AVAssetResourceLoader, shouldWaitForLoadingOfRequestedResource loadingRequest:AVAssetResourceLoadingRequest) -> Bool {
+ return loadingRequestHandling(loadingRequest)
+ }
+
+ func resourceLoader(_ resourceLoader:AVAssetResourceLoader, didCancel loadingRequest:AVAssetResourceLoadingRequest) {
+ NSLog("didCancelLoadingRequest")
+ }
+
+ func setLicenseResult(_ license:String!) {
+ guard let respondData = RCTVideoUtils.base64DataFromBase64String(base64String: license),
+ let _loadingRequest = _loadingRequest else {
+ setLicenseResultError("No data from JS license response")
+ return
+ }
+ let dataRequest:AVAssetResourceLoadingDataRequest! = _loadingRequest.dataRequest
+ dataRequest.respond(with: respondData)
+ _loadingRequest.finishLoading()
+ }
+
+ func setLicenseResultError(_ error:String!) {
+ if _loadingRequest != nil {
+ self.finishLoadingWithError(error: RCTVideoErrorHandler.fromJSPart(error))
+ }
+ }
+
+ func finishLoadingWithError(error:Error!) -> Bool {
+ if let _loadingRequest = _loadingRequest, let error = error {
+ _loadingRequest.finishLoading(with: error as! NSError)
+
+ _onVideoError?([
+ "error": [
+ "code": NSNumber(value: (error as NSError).code),
+ "localizedDescription": error.localizedDescription == nil ? "" : error.localizedDescription,
+ "localizedFailureReason": ((error as NSError).localizedFailureReason == nil ? "" : (error as NSError).localizedFailureReason) ?? "",
+ "localizedRecoverySuggestion": ((error as NSError).localizedRecoverySuggestion == nil ? "" : (error as NSError).localizedRecoverySuggestion) ?? "",
+ "domain": (error as NSError).domain
+ ],
+ "target": _reactTag
+ ])
+
+ }
+ return false
+ }
+
+ func loadingRequestHandling(_ loadingRequest:AVAssetResourceLoadingRequest!) -> Bool {
+ if handleEmbeddedKey(loadingRequest) {
+ return true
+ }
+
+ if _drm != nil {
+ return handleDrm(loadingRequest)
+ }
+
+ return false
+ }
+
+ func handleEmbeddedKey(_ loadingRequest:AVAssetResourceLoadingRequest!) -> Bool {
+ guard let url = loadingRequest.request.url,
+ let _localSourceEncryptionKeyScheme = _localSourceEncryptionKeyScheme,
+ let persistentKeyData = RCTVideoUtils.extractDataFromCustomSchemeUrl(from: url, scheme: _localSourceEncryptionKeyScheme)
+ else {
+ return false
+ }
+
+ loadingRequest.contentInformationRequest?.contentType = AVStreamingKeyDeliveryPersistentContentKeyType
+ loadingRequest.contentInformationRequest?.isByteRangeAccessSupported = true
+ loadingRequest.contentInformationRequest?.contentLength = Int64(persistentKeyData.count)
+ loadingRequest.dataRequest?.respond(with: persistentKeyData)
+ loadingRequest.finishLoading()
+
+ return true
+ }
+
+ func handleDrm(_ loadingRequest:AVAssetResourceLoadingRequest!) -> Bool {
+ if _requestingCertificate {
+ return true
+ } else if _requestingCertificateErrored {
+ return false
+ }
+ _loadingRequest = loadingRequest
+
+ guard let _drm = _drm, let drmType = _drm.type, drmType == "fairplay" else {
+ return finishLoadingWithError(error: RCTVideoErrorHandler.noDRMData)
+ }
+
+ var promise: Promise
+ if _onGetLicense != nil {
+ let contentId = _drm.contentId ?? loadingRequest.request.url?.host
+ promise = RCTVideoDRM.handleWithOnGetLicense(
+ loadingRequest:loadingRequest,
+ contentId:contentId,
+ certificateUrl:_drm.certificateUrl,
+ base64Certificate:_drm.base64Certificate
+ ) .then{ spcData -> Void in
+ self._requestingCertificate = true
+ self._onGetLicense?(["licenseUrl": self._drm?.licenseServer ?? "",
+ "contentId": contentId,
+ "spcBase64": spcData.base64EncodedString(options: []),
+ "target": self._reactTag])
+ }
+ } else {
+ promise = RCTVideoDRM.handleInternalGetLicense(
+ loadingRequest:loadingRequest,
+ contentId:_drm.contentId,
+ licenseServer:_drm.licenseServer,
+ certificateUrl:_drm.certificateUrl,
+ base64Certificate:_drm.base64Certificate,
+ headers:_drm.headers
+ ) .then{ data -> Void in
+ guard let dataRequest = loadingRequest.dataRequest else {
+ throw RCTVideoErrorHandler.noCertificateData
+ }
+ dataRequest.respond(with:data)
+ loadingRequest.finishLoading()
+ }
+ }
+
+
+ promise.catch{ error in
+ self.finishLoadingWithError(error:error)
+ self._requestingCertificateErrored = true
+ }
+
+ return true
+ }
+}
diff --git a/ios/Video/Features/RCTVideoDRM.swift b/ios/Video/Features/RCTVideoDRM.swift
new file mode 100644
index 00000000..d059bbc4
--- /dev/null
+++ b/ios/Video/Features/RCTVideoDRM.swift
@@ -0,0 +1,168 @@
+import AVFoundation
+import Promises
+
+struct RCTVideoDRM {
+ @available(*, unavailable) private init() {}
+
+ static func fetchLicense(
+ licenseServer: String,
+ spcData: Data?,
+ contentId: String,
+ headers: [String:Any]?
+ ) -> Promise {
+ let request = createLicenseRequest(licenseServer:licenseServer, spcData:spcData, contentId:contentId, headers:headers)
+
+ return Promise(on: .global()) { fulfill, reject in
+ let postDataTask = URLSession.shared.dataTask(with: request as URLRequest, completionHandler:{ (data:Data!,response:URLResponse!,error:Error!) in
+
+ let httpResponse:HTTPURLResponse! = (response as! HTTPURLResponse)
+
+ guard error == nil else {
+ print("Error getting license from \(licenseServer), HTTP status code \(httpResponse.statusCode)")
+ reject(error)
+ return
+ }
+ guard httpResponse.statusCode == 200 else {
+ print("Error getting license from \(licenseServer), HTTP status code \(httpResponse.statusCode)")
+ reject(RCTVideoErrorHandler.licenseRequestNotOk(httpResponse.statusCode))
+ return
+ }
+
+ guard data != nil, let decodedData = Data(base64Encoded: data, options: []) else {
+ reject(RCTVideoErrorHandler.noDataFromLicenseRequest)
+ return
+ }
+
+ fulfill(decodedData)
+ })
+ postDataTask.resume()
+ }
+ }
+
+ static func createLicenseRequest(
+ licenseServer: String,
+ spcData: Data?,
+ contentId: String,
+ headers: [String:Any]?
+ ) -> URLRequest {
+ var request = URLRequest(url: URL(string: licenseServer)!)
+ request.httpMethod = "POST"
+
+ if let headers = headers {
+ for item in headers {
+ guard let key = item.key as? String, let value = item.value as? String else {
+ continue
+ }
+ request.setValue(value, forHTTPHeaderField: key)
+ }
+ }
+
+ let spcEncoded = spcData?.base64EncodedString(options: [])
+ let spcUrlEncoded = CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, spcEncoded as? CFString? as! CFString, nil, "?=&+" as CFString, CFStringBuiltInEncodings.UTF8.rawValue) as? String
+ let post = String(format:"spc=%@&%@", spcUrlEncoded as! CVarArg, contentId)
+ let postData = post.data(using: String.Encoding.utf8, allowLossyConversion:true)
+ request.httpBody = postData
+
+ return request
+ }
+
+ static func fetchSpcData(
+ loadingRequest: AVAssetResourceLoadingRequest,
+ certificateData: Data,
+ contentIdData: Data
+ ) -> Promise {
+ return Promise(on: .global()) { fulfill, reject in
+ var spcError:NSError!
+ var spcData: Data?
+ do {
+ spcData = try loadingRequest.streamingContentKeyRequestData(forApp: certificateData, contentIdentifier: contentIdData as Data, options: nil)
+ } catch _ {
+ print("SPC error")
+ }
+
+ if spcError != nil {
+ reject(spcError)
+ }
+
+ guard let spcData = spcData else {
+ reject(RCTVideoErrorHandler.noSPC)
+ return
+ }
+
+ fulfill(spcData)
+ }
+ }
+
+ static func createCertificateData(certificateStringUrl:String?, base64Certificate:Bool?) -> Promise {
+ return Promise(on: .global()) { fulfill, reject in
+
+ guard let certificateStringUrl = certificateStringUrl,
+ let certificateURL = URL(string: certificateStringUrl.addingPercentEncoding(withAllowedCharacters: .urlFragmentAllowed) ?? "") else {
+ reject(RCTVideoErrorHandler.noCertificateURL)
+ return
+ }
+
+ var certificateData:Data?
+ do {
+ certificateData = try Data(contentsOf: certificateURL)
+ if (base64Certificate != nil) {
+ certificateData = Data(base64Encoded: certificateData! as Data, options: .ignoreUnknownCharacters)
+ }
+ } catch {}
+
+ guard let certificateData = certificateData else {
+ reject(RCTVideoErrorHandler.noCertificateData)
+ return
+ }
+
+ fulfill(certificateData)
+ }
+ }
+
+ static func handleWithOnGetLicense(loadingRequest: AVAssetResourceLoadingRequest, contentId:String?, certificateUrl:String?, base64Certificate:Bool?) -> Promise {
+ let contentIdData = contentId?.data(using: .utf8)
+
+ return RCTVideoDRM.createCertificateData(certificateStringUrl:certificateUrl, base64Certificate:base64Certificate)
+ .then{ certificateData -> Promise in
+ guard let contentIdData = contentIdData else {
+ throw RCTVideoError.invalidContentId as! Error
+ }
+
+ return RCTVideoDRM.fetchSpcData(
+ loadingRequest:loadingRequest,
+ certificateData:certificateData,
+ contentIdData:contentIdData
+ )
+ }
+ }
+
+ static func handleInternalGetLicense(loadingRequest: AVAssetResourceLoadingRequest, contentId:String?, licenseServer:String?, certificateUrl:String?, base64Certificate:Bool?, headers: [String:Any]?) -> Promise {
+ let url = loadingRequest.request.url
+
+ guard let contentId = contentId ?? url?.absoluteString.replacingOccurrences(of: "skd://", with:"") else {
+ return Promise(RCTVideoError.invalidContentId as! Error)
+ }
+
+ let contentIdData = NSData(bytes: contentId.cString(using: String.Encoding.utf8), length:contentId.lengthOfBytes(using: String.Encoding.utf8)) as Data
+
+ return RCTVideoDRM.createCertificateData(certificateStringUrl:certificateUrl, base64Certificate:base64Certificate)
+ .then{ certificateData in
+ return RCTVideoDRM.fetchSpcData(
+ loadingRequest:loadingRequest,
+ certificateData:certificateData,
+ contentIdData:contentIdData
+ )
+ }
+ .then{ spcData -> Promise in
+ guard let licenseServer = licenseServer else {
+ throw RCTVideoError.noLicenseServerURL as! Error
+ }
+ return RCTVideoDRM.fetchLicense(
+ licenseServer: licenseServer,
+ spcData: spcData,
+ contentId: contentId,
+ headers: headers
+ )
+ }
+ }
+}
diff --git a/ios/Video/Features/RCTVideoErrorHandling.swift b/ios/Video/Features/RCTVideoErrorHandling.swift
new file mode 100644
index 00000000..e795aa28
--- /dev/null
+++ b/ios/Video/Features/RCTVideoErrorHandling.swift
@@ -0,0 +1,103 @@
+enum RCTVideoError : Int {
+ case fromJSPart
+ case noLicenseServerURL
+ case licenseRequestNotOk
+ case noDataFromLicenseRequest
+ case noSPC
+ case noDataRequest
+ case noCertificateData
+ case noCertificateURL
+ case noFairplayDRM
+ case noDRMData
+ case invalidContentId
+}
+
+enum RCTVideoErrorHandler {
+
+ static let noDRMData = NSError(
+ domain: "RCTVideo",
+ code: RCTVideoError.noDRMData.rawValue,
+ userInfo: [
+ NSLocalizedDescriptionKey: "Error obtaining DRM license.",
+ NSLocalizedFailureReasonErrorKey: "No drm object found.",
+ NSLocalizedRecoverySuggestionErrorKey: "Have you specified the 'drm' prop?"
+ ])
+
+ static let noCertificateURL = NSError(
+ domain: "RCTVideo",
+ code: RCTVideoError.noCertificateURL.rawValue,
+ userInfo: [
+ NSLocalizedDescriptionKey: "Error obtaining DRM License.",
+ NSLocalizedFailureReasonErrorKey: "No certificate URL has been found.",
+ NSLocalizedRecoverySuggestionErrorKey: "Did you specified the prop certificateUrl?"
+ ])
+
+ static let noCertificateData = NSError(
+ domain: "RCTVideo",
+ code: RCTVideoError.noCertificateData.rawValue,
+ userInfo: [
+ NSLocalizedDescriptionKey: "Error obtaining DRM license.",
+ NSLocalizedFailureReasonErrorKey: "No certificate data obtained from the specificied url.",
+ NSLocalizedRecoverySuggestionErrorKey: "Have you specified a valid 'certificateUrl'?"
+ ])
+
+ static let noSPC = NSError(
+ domain: "RCTVideo",
+ code: RCTVideoError.noSPC.rawValue,
+ userInfo: [
+ NSLocalizedDescriptionKey: "Error obtaining license.",
+ NSLocalizedFailureReasonErrorKey: "No spc received.",
+ NSLocalizedRecoverySuggestionErrorKey: "Check your DRM config."
+ ])
+
+ static let noLicenseServerURL = NSError(
+ domain: "RCTVideo",
+ code: RCTVideoError.noLicenseServerURL.rawValue,
+ userInfo: [
+ NSLocalizedDescriptionKey: "Error obtaining DRM License.",
+ NSLocalizedFailureReasonErrorKey: "No license server URL has been found.",
+ NSLocalizedRecoverySuggestionErrorKey: "Did you specified the prop licenseServer?"
+ ])
+
+ static let noDataFromLicenseRequest = NSError(
+ domain: "RCTVideo",
+ code: RCTVideoError.noDataFromLicenseRequest.rawValue,
+ userInfo: [
+ NSLocalizedDescriptionKey: "Error obtaining DRM license.",
+ NSLocalizedFailureReasonErrorKey: "No data received from the license server.",
+ NSLocalizedRecoverySuggestionErrorKey: "Is the licenseServer ok?"
+ ])
+
+ static func licenseRequestNotOk(_ statusCode: Int) -> NSError {
+ return NSError(
+ domain: "RCTVideo",
+ code: RCTVideoError.licenseRequestNotOk.rawValue,
+ userInfo: [
+ NSLocalizedDescriptionKey: "Error obtaining license.",
+ NSLocalizedFailureReasonErrorKey: String(
+ format:"License server responded with status code %li",
+ (statusCode)
+ ),
+ NSLocalizedRecoverySuggestionErrorKey: "Did you send the correct data to the license Server? Is the server ok?"
+ ])
+ }
+
+ static func fromJSPart(_ error: String) -> NSError {
+ return NSError(domain: "RCTVideo",
+ code: RCTVideoError.fromJSPart.rawValue,
+ userInfo: [
+ NSLocalizedDescriptionKey: error,
+ NSLocalizedFailureReasonErrorKey: error,
+ NSLocalizedRecoverySuggestionErrorKey: error
+ ])
+ }
+
+ static let invalidContentId = NSError(
+ domain: "RCTVideo",
+ code: RCTVideoError.invalidContentId.rawValue,
+ userInfo: [
+ NSLocalizedDescriptionKey: "Error obtaining DRM license.",
+ NSLocalizedFailureReasonErrorKey: "No valide content Id received",
+ NSLocalizedRecoverySuggestionErrorKey: "Is the contentId and url ok?"
+ ])
+}
diff --git a/ios/Video/Features/RCTVideoSave.swift b/ios/Video/Features/RCTVideoSave.swift
new file mode 100644
index 00000000..ff8155ec
--- /dev/null
+++ b/ios/Video/Features/RCTVideoSave.swift
@@ -0,0 +1,75 @@
+import AVFoundation
+
+enum RCTVideoSave {
+
+ static func save(
+ options:NSDictionary!,
+ resolve: @escaping RCTPromiseResolveBlock,
+ reject:@escaping RCTPromiseRejectBlock,
+
+ playerItem: AVPlayerItem?
+ ) {
+ let asset:AVAsset! = playerItem?.asset
+
+ guard asset != nil else {
+ reject("ERROR_ASSET_NIL", "Asset is nil", nil)
+ return
+ }
+
+ guard let exportSession = AVAssetExportSession(asset: asset, presetName:AVAssetExportPresetHighestQuality) else {
+ reject("ERROR_COULD_NOT_CREATE_EXPORT_SESSION", "Could not create export session", nil)
+ return
+ }
+ var path:String! = nil
+ path = RCTVideoSave.generatePathInDirectory(
+ directory: URL(fileURLWithPath: RCTVideoSave.cacheDirectoryPath() ?? "").appendingPathComponent("Videos").path,
+ withExtension: ".mp4")
+ let url:NSURL! = NSURL.fileURL(withPath: path) as NSURL
+ exportSession.outputFileType = AVFileType.mp4
+ exportSession.outputURL = url as URL?
+ exportSession.videoComposition = playerItem?.videoComposition
+ exportSession.shouldOptimizeForNetworkUse = true
+ exportSession.exportAsynchronously(completionHandler: {
+
+ switch (exportSession.status) {
+ case .failed:
+ reject("ERROR_COULD_NOT_EXPORT_VIDEO", "Could not export video", exportSession.error)
+ break
+ case .cancelled:
+ reject("ERROR_EXPORT_SESSION_CANCELLED", "Export session was cancelled", exportSession.error)
+ break
+ default:
+ resolve(["uri": url.absoluteString])
+ break
+ }
+
+ })
+ }
+
+ static func generatePathInDirectory(directory: String?, withExtension `extension`: String?) -> String? {
+ let fileName = UUID().uuidString + (`extension` ?? "")
+ RCTVideoSave.ensureDirExists(withPath: directory)
+ return URL(fileURLWithPath: directory ?? "").appendingPathComponent(fileName).path
+ }
+
+ static func cacheDirectoryPath() -> String? {
+ let array = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).map(\.path)
+ return array[0]
+ }
+
+ static func ensureDirExists(withPath path: String?) -> Bool {
+ var isDir: ObjCBool = false
+ var error: Error?
+ let exists = FileManager.default.fileExists(atPath: path ?? "", isDirectory: &isDir)
+ if !(exists && isDir.boolValue) {
+ do {
+ try FileManager.default.createDirectory(atPath: path ?? "", withIntermediateDirectories: true, attributes: nil)
+ } catch {
+ }
+ if error != nil {
+ return false
+ }
+ }
+ return true
+ }
+}
diff --git a/ios/Video/Features/RCTVideoUtils.swift b/ios/Video/Features/RCTVideoUtils.swift
new file mode 100644
index 00000000..50df8e3f
--- /dev/null
+++ b/ios/Video/Features/RCTVideoUtils.swift
@@ -0,0 +1,304 @@
+import AVFoundation
+import Promises
+import Photos
+
+/*!
+ * Collection of pure functions
+ */
+enum RCTVideoUtils {
+
+ /*!
+ * Calculates and returns the playable duration of the current player item using its loaded time ranges.
+ *
+ * \returns The playable duration of the current player item in seconds.
+ */
+ static func calculatePlayableDuration(_ player:AVPlayer?) -> NSNumber {
+ guard let player = player,
+ let video:AVPlayerItem = player.currentItem,
+ video.status == AVPlayerItem.Status.readyToPlay else {
+ return 0
+ }
+
+ var effectiveTimeRange:CMTimeRange?
+ for (_, value) in video.loadedTimeRanges.enumerated() {
+ let timeRange:CMTimeRange = value.timeRangeValue
+ if CMTimeRangeContainsTime(timeRange, time: video.currentTime()) {
+ effectiveTimeRange = timeRange
+ break
+ }
+ }
+
+ if let effectiveTimeRange = effectiveTimeRange {
+ let playableDuration:Float64 = CMTimeGetSeconds(CMTimeRangeGetEnd(effectiveTimeRange))
+ if playableDuration > 0 {
+ return playableDuration as NSNumber
+ }
+ }
+
+ return 0
+ }
+
+ static func urlFilePath(filepath:NSString!, searchPath:FileManager.SearchPathDirectory) -> NSURL! {
+ if filepath.contains("file://") {
+ return NSURL(string: filepath as String)
+ }
+
+ // if no file found, check if the file exists in the Document directory
+ let paths:[String]! = NSSearchPathForDirectoriesInDomains(searchPath, .userDomainMask, true)
+ var relativeFilePath:String! = filepath.lastPathComponent
+ // the file may be multiple levels below the documents directory
+ let directoryString:String! = searchPath == .cachesDirectory ? "Library/Caches/" : "Documents";
+ let fileComponents:[String]! = filepath.components(separatedBy: directoryString)
+ if fileComponents.count > 1 {
+ relativeFilePath = fileComponents[1]
+ }
+
+ let path:String! = (paths.first! as NSString).appendingPathComponent(relativeFilePath)
+ if FileManager.default.fileExists(atPath: path) {
+ return NSURL.fileURL(withPath: path) as NSURL
+ }
+ return nil
+ }
+
+ static func playerItemSeekableTimeRange(_ player:AVPlayer?) -> CMTimeRange {
+ if let playerItem = player?.currentItem,
+ playerItem.status == .readyToPlay,
+ let firstItem = playerItem.seekableTimeRanges.first {
+ return firstItem.timeRangeValue
+ }
+
+ return (CMTimeRange.zero)
+ }
+
+ static func playerItemDuration(_ player:AVPlayer?) -> CMTime {
+ if let playerItem = player?.currentItem,
+ playerItem.status == .readyToPlay {
+ return(playerItem.duration)
+ }
+
+ return(CMTime.invalid)
+ }
+
+ static func calculateSeekableDuration(_ player:AVPlayer?) -> NSNumber {
+ let timeRange:CMTimeRange = RCTVideoUtils.playerItemSeekableTimeRange(player)
+ if CMTIME_IS_NUMERIC(timeRange.duration)
+ {
+ return NSNumber(value: CMTimeGetSeconds(timeRange.duration))
+ }
+ return 0
+ }
+
+ static func getAudioTrackInfo(_ player:AVPlayer?) -> [AnyObject]! {
+ guard let player = player else {
+ return []
+ }
+
+ let audioTracks:NSMutableArray! = NSMutableArray()
+ let group = player.currentItem?.asset.mediaSelectionGroup(forMediaCharacteristic: .audible)
+ for i in 0..<(group?.options.count ?? 0) {
+ let currentOption = group?.options[i]
+ var title = ""
+ let values = currentOption?.commonMetadata.map(\.value)
+ if (values?.count ?? 0) > 0, let value = values?[0] {
+ title = value as! String
+ }
+ let language:String! = currentOption?.extendedLanguageTag ?? ""
+ let audioTrack = [
+ "index": NSNumber(value: i),
+ "title": title,
+ "language": language
+ ] as [String : Any]
+ audioTracks.add(audioTrack)
+ }
+ return audioTracks as [AnyObject]?
+ }
+
+ static func getTextTrackInfo(_ player:AVPlayer?) -> [TextTrack]! {
+ guard let player = player else {
+ return []
+ }
+
+ // if streaming video, we extract the text tracks
+ var textTracks:[TextTrack] = []
+ let group = player.currentItem?.asset.mediaSelectionGroup(forMediaCharacteristic: .legible)
+ for i in 0..<(group?.options.count ?? 0) {
+ let currentOption = group?.options[i]
+ var title = ""
+ let values = currentOption?.commonMetadata.map(\.value)
+ if (values?.count ?? 0) > 0, let value = values?[0] {
+ title = value as! String
+ }
+ let language:String! = currentOption?.extendedLanguageTag ?? ""
+ let textTrack = TextTrack([
+ "index": NSNumber(value: i),
+ "title": title,
+ "language": language
+ ])
+ textTracks.append(textTrack)
+ }
+ return textTracks
+ }
+
+ // UNUSED
+ static func getCurrentTime(playerItem:AVPlayerItem?) -> Float {
+ return Float(CMTimeGetSeconds(playerItem?.currentTime() ?? .zero))
+ }
+
+ static func base64DataFromBase64String(base64String:String?) -> Data? {
+ if let base64String = base64String {
+ return Data(base64Encoded:base64String)
+ }
+ return nil
+ }
+
+ static func replaceURLScheme(url: URL, scheme: String?) -> URL? {
+ var urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)
+ urlComponents?.scheme = scheme
+
+ return urlComponents?.url
+ }
+
+ static func extractDataFromCustomSchemeUrl(from url: URL, scheme: String) -> Data? {
+ guard url.scheme == scheme,
+ let adoptURL = RCTVideoUtils.replaceURLScheme(url:url, scheme: nil) else { return nil }
+
+ return Data(base64Encoded: adoptURL.absoluteString)
+ }
+
+ static func generateMixComposition(_ asset:AVAsset) -> AVMutableComposition {
+ let mixComposition:AVMutableComposition = AVMutableComposition()
+
+ let videoAsset:AVAssetTrack! = asset.tracks(withMediaType: AVMediaType.video).first
+ let videoCompTrack:AVMutableCompositionTrack! = mixComposition.addMutableTrack(withMediaType: AVMediaType.video, preferredTrackID:kCMPersistentTrackID_Invalid)
+ do {
+ try videoCompTrack.insertTimeRange(
+ CMTimeRangeMake(start: .zero, duration: videoAsset.timeRange.duration),
+ of: videoAsset,
+ at: .zero)
+ } catch {
+ }
+
+ let audioAsset:AVAssetTrack! = asset.tracks(withMediaType: AVMediaType.audio).first
+ let audioCompTrack:AVMutableCompositionTrack! = mixComposition.addMutableTrack(withMediaType: AVMediaType.audio, preferredTrackID:kCMPersistentTrackID_Invalid)
+ do {
+ try audioCompTrack.insertTimeRange(
+ CMTimeRangeMake(start: .zero, duration: videoAsset.timeRange.duration),
+ of: audioAsset,
+ at: .zero)
+ } catch {
+ }
+
+ return mixComposition
+ }
+
+ static func getValidTextTracks(asset:AVAsset, assetOptions:NSDictionary?, mixComposition:AVMutableComposition, textTracks:[TextTrack]?) -> [TextTrack] {
+ let videoAsset:AVAssetTrack! = asset.tracks(withMediaType: AVMediaType.video).first
+ var validTextTracks:[TextTrack] = []
+
+ if let textTracks = textTracks, textTracks.count > 0 {
+ for i in 0.. TextTrack? {
+ let fileManager = FileManager.default
+ let cachesDirectoryUrl = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0]
+ let filePath = cachesDirectoryUrl.appendingPathComponent("empty.vtt").path
+
+ if !fileManager.fileExists(atPath: filePath) {
+ let stringToWrite = "WEBVTT\n\n1\n99:59:59.000 --> 99:59:59.001\n."
+
+ do {
+ try stringToWrite.write(to: URL(fileURLWithPath: filePath), atomically: true, encoding: String.Encoding.utf8)
+ } catch {
+ return nil
+ }
+ }
+
+ return TextTrack([
+ "language": "disabled",
+ "title": "EmptyVttFile",
+ "type": "text/vtt",
+ "uri": filePath,
+ ])
+ }
+
+ static func delay(seconds: Int = 0) -> Promise {
+ return Promise(on: .global()) { fulfill, reject in
+ DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + Double(Int64(seconds)) / Double(NSEC_PER_SEC), execute: {
+ fulfill(())
+ })
+ }
+ }
+
+ static func preparePHAsset(uri: String) -> Promise {
+ return Promise(on: .global()) { fulfill, reject in
+ let assetId = String(uri[uri.index(uri.startIndex, offsetBy: "ph://".count)...])
+ guard let phAsset = PHAsset.fetchAssets(withLocalIdentifiers: [assetId], options: nil).firstObject else {
+ reject(NSError(domain: "", code: 0, userInfo: nil))
+ return
+ }
+ let options = PHVideoRequestOptions()
+ options.isNetworkAccessAllowed = true
+ PHCachingImageManager().requestAVAsset(forVideo: phAsset, options: options) { data, _, _ in
+ fulfill(data)
+ }
+ }
+ }
+
+ static func prepareAsset(source:VideoSource) -> (asset:AVURLAsset?, assetOptions:NSMutableDictionary?)? {
+ guard let sourceUri = source.uri, sourceUri != "" else { return nil }
+ var asset:AVURLAsset!
+ let bundlePath = Bundle.main.path(forResource: source.uri, ofType: source.type) ?? ""
+ let url = source.isNetwork || source.isAsset
+ ? URL(string: source.uri ?? "")
+ : URL(fileURLWithPath: bundlePath)
+ let assetOptions:NSMutableDictionary! = NSMutableDictionary()
+
+ if source.isNetwork {
+ if let headers = source.requestHeaders, headers.count > 0 {
+ assetOptions.setObject(headers, forKey:"AVURLAssetHTTPHeaderFieldsKey" as NSCopying)
+ }
+ let cookies:[AnyObject]! = HTTPCookieStorage.shared.cookies
+ assetOptions.setObject(cookies, forKey:AVURLAssetHTTPCookiesKey as NSCopying)
+ asset = AVURLAsset(url: url!, options:assetOptions as! [String : Any])
+ } else {
+ asset = AVURLAsset(url: url!)
+ }
+ return (asset, assetOptions)
+ }
+}
diff --git a/ios/Video/RCTVideo-Bridging-Header.h b/ios/Video/RCTVideo-Bridging-Header.h
new file mode 100644
index 00000000..77815e4e
--- /dev/null
+++ b/ios/Video/RCTVideo-Bridging-Header.h
@@ -0,0 +1,7 @@
+#import
+#import "RCTVideoSwiftLog.h"
+
+#if __has_include()
+#import "RCTVideoCache.h"
+#endif
+
diff --git a/ios/Video/RCTVideo.h b/ios/Video/RCTVideo.h
deleted file mode 100644
index 26d436c2..00000000
--- a/ios/Video/RCTVideo.h
+++ /dev/null
@@ -1,52 +0,0 @@
-#import
-#import "AVKit/AVKit.h"
-#import "UIView+FindUIViewController.h"
-#import "RCTVideoPlayerViewController.h"
-#import "RCTVideoPlayerViewControllerDelegate.h"
-#import
-#import
-
-#if __has_include()
-#import
-#import
-#import
-#endif
-
-@class RCTEventDispatcher;
-#if __has_include()
-@interface RCTVideo : UIView
-#elif TARGET_OS_TV
-@interface RCTVideo : UIView
-#else
-@interface RCTVideo : UIView
-#endif
-
-@property (nonatomic, copy) RCTDirectEventBlock onVideoLoadStart;
-@property (nonatomic, copy) RCTDirectEventBlock onVideoLoad;
-@property (nonatomic, copy) RCTDirectEventBlock onVideoBuffer;
-@property (nonatomic, copy) RCTDirectEventBlock onVideoError;
-@property (nonatomic, copy) RCTDirectEventBlock onVideoProgress;
-@property (nonatomic, copy) RCTDirectEventBlock onBandwidthUpdate;
-@property (nonatomic, copy) RCTDirectEventBlock onVideoSeek;
-@property (nonatomic, copy) RCTDirectEventBlock onVideoEnd;
-@property (nonatomic, copy) RCTDirectEventBlock onTimedMetadata;
-@property (nonatomic, copy) RCTDirectEventBlock onVideoAudioBecomingNoisy;
-@property (nonatomic, copy) RCTDirectEventBlock onVideoFullscreenPlayerWillPresent;
-@property (nonatomic, copy) RCTDirectEventBlock onVideoFullscreenPlayerDidPresent;
-@property (nonatomic, copy) RCTDirectEventBlock onVideoFullscreenPlayerWillDismiss;
-@property (nonatomic, copy) RCTDirectEventBlock onVideoFullscreenPlayerDidDismiss;
-@property (nonatomic, copy) RCTDirectEventBlock onReadyForDisplay;
-@property (nonatomic, copy) RCTDirectEventBlock onPlaybackStalled;
-@property (nonatomic, copy) RCTDirectEventBlock onPlaybackResume;
-@property (nonatomic, copy) RCTDirectEventBlock onPlaybackRateChange;
-@property (nonatomic, copy) RCTDirectEventBlock onVideoExternalPlaybackChange;
-@property (nonatomic, copy) RCTDirectEventBlock onPictureInPictureStatusChanged;
-@property (nonatomic, copy) RCTDirectEventBlock onRestoreUserInterfaceForPictureInPictureStop;
-
-- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher NS_DESIGNATED_INITIALIZER;
-
-- (AVPlayerViewController*)createPlayerViewController:(AVPlayer*)player withPlayerItem:(AVPlayerItem*)playerItem;
-
-- (void)save:(NSDictionary *)options resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject;
-
-@end
diff --git a/ios/Video/RCTVideo.m b/ios/Video/RCTVideo.m
deleted file mode 100644
index 3e666e60..00000000
--- a/ios/Video/RCTVideo.m
+++ /dev/null
@@ -1,1636 +0,0 @@
-#import
-#import "RCTVideo.h"
-#import
-#import
-#import
-#include
-#include
-
-static NSString *const statusKeyPath = @"status";
-static NSString *const playbackLikelyToKeepUpKeyPath = @"playbackLikelyToKeepUp";
-static NSString *const playbackBufferEmptyKeyPath = @"playbackBufferEmpty";
-static NSString *const readyForDisplayKeyPath = @"readyForDisplay";
-static NSString *const playbackRate = @"rate";
-static NSString *const timedMetadata = @"timedMetadata";
-static NSString *const externalPlaybackActive = @"externalPlaybackActive";
-
-static int const RCTVideoUnset = -1;
-
-#ifdef DEBUG
- #define DebugLog(...) NSLog(__VA_ARGS__)
-#else
- #define DebugLog(...) (void)0
-#endif
-
-@implementation RCTVideo
-{
- AVPlayer *_player;
- AVPlayerItem *_playerItem;
- NSDictionary *_source;
- BOOL _playerItemObserversSet;
- BOOL _playerBufferEmpty;
- AVPlayerLayer *_playerLayer;
- BOOL _playerLayerObserverSet;
- RCTVideoPlayerViewController *_playerViewController;
- NSURL *_videoURL;
-
- /* Required to publish events */
- RCTEventDispatcher *_eventDispatcher;
- BOOL _playbackRateObserverRegistered;
- BOOL _isExternalPlaybackActiveObserverRegistered;
- BOOL _videoLoadStarted;
-
- bool _pendingSeek;
- float _pendingSeekTime;
- float _lastSeekTime;
-
- /* For sending videoProgress events */
- Float64 _progressUpdateInterval;
- BOOL _controls;
- id _timeObserver;
-
- /* Keep track of any modifiers, need to be applied after each play */
- float _volume;
- float _rate;
- float _maxBitRate;
-
- BOOL _automaticallyWaitsToMinimizeStalling;
- BOOL _muted;
- BOOL _paused;
- BOOL _repeat;
- BOOL _allowsExternalPlayback;
- NSArray * _textTracks;
- NSDictionary * _selectedTextTrack;
- NSDictionary * _selectedAudioTrack;
- BOOL _playbackStalled;
- BOOL _playInBackground;
- BOOL _playWhenInactive;
- BOOL _pictureInPicture;
- NSString * _ignoreSilentSwitch;
- NSString * _resizeMode;
- BOOL _fullscreen;
- BOOL _fullscreenAutorotate;
- NSString * _fullscreenOrientation;
- BOOL _fullscreenPlayerPresented;
- NSString *_filterName;
- BOOL _filterEnabled;
- UIViewController * _presentingViewController;
-#if __has_include()
- RCTVideoCache * _videoCache;
-#endif
-#if TARGET_OS_IOS
- void (^__strong _Nonnull _restoreUserInterfaceForPIPStopCompletionHandler)(BOOL);
- AVPictureInPictureController *_pipController;
-#endif
-}
-
-- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher
-{
- if ((self = [super init])) {
- _eventDispatcher = eventDispatcher;
- _automaticallyWaitsToMinimizeStalling = YES;
- _playbackRateObserverRegistered = NO;
- _isExternalPlaybackActiveObserverRegistered = NO;
- _playbackStalled = NO;
- _rate = 1.0;
- _volume = 1.0;
- _resizeMode = @"AVLayerVideoGravityResizeAspectFill";
- _fullscreenAutorotate = YES;
- _fullscreenOrientation = @"all";
- _pendingSeek = false;
- _pendingSeekTime = 0.0f;
- _lastSeekTime = 0.0f;
- _progressUpdateInterval = 250;
- _controls = NO;
- _playerBufferEmpty = YES;
- _playInBackground = false;
- _allowsExternalPlayback = YES;
- _playWhenInactive = false;
- _pictureInPicture = false;
- _ignoreSilentSwitch = @"inherit"; // inherit, ignore, obey
-#if TARGET_OS_IOS
- _restoreUserInterfaceForPIPStopCompletionHandler = NULL;
-#endif
-#if __has_include()
- _videoCache = [RCTVideoCache sharedInstance];
-#endif
- [[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(applicationWillResignActive:)
- name:UIApplicationWillResignActiveNotification
- object:nil];
-
- [[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(applicationDidEnterBackground:)
- name:UIApplicationDidEnterBackgroundNotification
- object:nil];
-
- [[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(applicationWillEnterForeground:)
- name:UIApplicationWillEnterForegroundNotification
- object:nil];
-
- [[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(audioRouteChanged:)
- name:AVAudioSessionRouteChangeNotification
- object:nil];
- }
-
- return self;
-}
-
-- (RCTVideoPlayerViewController*)createPlayerViewController:(AVPlayer*)player
- withPlayerItem:(AVPlayerItem*)playerItem {
- RCTVideoPlayerViewController* viewController = [[RCTVideoPlayerViewController alloc] init];
- viewController.showsPlaybackControls = YES;
- viewController.rctDelegate = self;
- viewController.preferredOrientation = _fullscreenOrientation;
-
- viewController.view.frame = self.bounds;
- viewController.player = player;
- return viewController;
-}
-
-/* ---------------------------------------------------------
- ** Get the duration for a AVPlayerItem.
- ** ------------------------------------------------------- */
-
-- (CMTime)playerItemDuration
-{
- AVPlayerItem *playerItem = [_player currentItem];
- if (playerItem.status == AVPlayerItemStatusReadyToPlay)
- {
- return([playerItem duration]);
- }
-
- return(kCMTimeInvalid);
-}
-
-- (CMTimeRange)playerItemSeekableTimeRange
-{
- AVPlayerItem *playerItem = [_player currentItem];
- if (playerItem.status == AVPlayerItemStatusReadyToPlay)
- {
- return [playerItem seekableTimeRanges].firstObject.CMTimeRangeValue;
- }
-
- return (kCMTimeRangeZero);
-}
-
--(void)addPlayerTimeObserver
-{
- const Float64 progressUpdateIntervalMS = _progressUpdateInterval / 1000;
- // @see endScrubbing in AVPlayerDemoPlaybackViewController.m
- // of https://developer.apple.com/library/ios/samplecode/AVPlayerDemo/Introduction/Intro.html
- __weak RCTVideo *weakSelf = self;
- _timeObserver = [_player addPeriodicTimeObserverForInterval:CMTimeMakeWithSeconds(progressUpdateIntervalMS, NSEC_PER_SEC)
- queue:NULL
- usingBlock:^(CMTime time) { [weakSelf sendProgressUpdate]; }
- ];
-}
-
-/* Cancels the previously registered time observer. */
--(void)removePlayerTimeObserver
-{
- if (_timeObserver)
- {
- [_player removeTimeObserver:_timeObserver];
- _timeObserver = nil;
- }
-}
-
-#pragma mark - Progress
-
-- (void)dealloc
-{
- [[NSNotificationCenter defaultCenter] removeObserver:self];
- [self removePlayerLayer];
- [self removePlayerItemObservers];
- [_player removeObserver:self forKeyPath:playbackRate context:nil];
- [_player removeObserver:self forKeyPath:externalPlaybackActive context: nil];
-}
-
-#pragma mark - App lifecycle handlers
-
-- (void)applicationWillResignActive:(NSNotification *)notification
-{
- if (_playInBackground || _playWhenInactive || _paused) return;
-
- [_player pause];
- [_player setRate:0.0];
-}
-
-- (void)applicationDidEnterBackground:(NSNotification *)notification
-{
- if (_playInBackground) {
- // Needed to play sound in background. See https://developer.apple.com/library/ios/qa/qa1668/_index.html
- [_playerLayer setPlayer:nil];
- [_playerViewController setPlayer:nil];
- }
-}
-
-- (void)applicationWillEnterForeground:(NSNotification *)notification
-{
- [self applyModifiers];
- if (_playInBackground) {
- [_playerLayer setPlayer:_player];
- [_playerViewController setPlayer:_player];
- }
-}
-
-#pragma mark - Audio events
-
-- (void)audioRouteChanged:(NSNotification *)notification
-{
- NSNumber *reason = [[notification userInfo] objectForKey:AVAudioSessionRouteChangeReasonKey];
- NSNumber *previousRoute = [[notification userInfo] objectForKey:AVAudioSessionRouteChangePreviousRouteKey];
- if (reason.unsignedIntValue == AVAudioSessionRouteChangeReasonOldDeviceUnavailable) {
- self.onVideoAudioBecomingNoisy(@{@"target": self.reactTag});
- }
-}
-
-#pragma mark - Progress
-
-- (void)sendProgressUpdate
-{
- AVPlayerItem *video = [_player currentItem];
- if (video == nil || video.status != AVPlayerItemStatusReadyToPlay) {
- return;
- }
-
- CMTime playerDuration = [self playerItemDuration];
- if (CMTIME_IS_INVALID(playerDuration)) {
- return;
- }
-
- CMTime currentTime = _player.currentTime;
- const Float64 duration = CMTimeGetSeconds(playerDuration);
- const Float64 currentTimeSecs = CMTimeGetSeconds(currentTime);
-
- [[NSNotificationCenter defaultCenter] postNotificationName:@"RCTVideo_progress" object:nil userInfo:@{@"progress": [NSNumber numberWithDouble: currentTimeSecs / duration]}];
-
- if( currentTimeSecs >= 0 && self.onVideoProgress) {
- self.onVideoProgress(@{
- @"currentTime": [NSNumber numberWithFloat:CMTimeGetSeconds(currentTime)],
- @"playableDuration": [self calculatePlayableDuration],
- @"atValue": [NSNumber numberWithLongLong:currentTime.value],
- @"atTimescale": [NSNumber numberWithInt:currentTime.timescale],
- @"target": self.reactTag,
- @"seekableDuration": [self calculateSeekableDuration],
- });
- }
-}
-
-/*!
- * Calculates and returns the playable duration of the current player item using its loaded time ranges.
- *
- * \returns The playable duration of the current player item in seconds.
- */
-- (NSNumber *)calculatePlayableDuration
-{
- AVPlayerItem *video = _player.currentItem;
- if (video.status == AVPlayerItemStatusReadyToPlay) {
- __block CMTimeRange effectiveTimeRange;
- [video.loadedTimeRanges enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
- CMTimeRange timeRange = [obj CMTimeRangeValue];
- if (CMTimeRangeContainsTime(timeRange, video.currentTime)) {
- effectiveTimeRange = timeRange;
- *stop = YES;
- }
- }];
- Float64 playableDuration = CMTimeGetSeconds(CMTimeRangeGetEnd(effectiveTimeRange));
- if (playableDuration > 0) {
- return [NSNumber numberWithFloat:playableDuration];
- }
- }
- return [NSNumber numberWithInteger:0];
-}
-
-- (NSNumber *)calculateSeekableDuration
-{
- CMTimeRange timeRange = [self playerItemSeekableTimeRange];
- if (CMTIME_IS_NUMERIC(timeRange.duration))
- {
- return [NSNumber numberWithFloat:CMTimeGetSeconds(timeRange.duration)];
- }
- return [NSNumber numberWithInteger:0];
-}
-
-- (void)addPlayerItemObservers
-{
- [_playerItem addObserver:self forKeyPath:statusKeyPath options:0 context:nil];
- [_playerItem addObserver:self forKeyPath:playbackBufferEmptyKeyPath options:0 context:nil];
- [_playerItem addObserver:self forKeyPath:playbackLikelyToKeepUpKeyPath options:0 context:nil];
- [_playerItem addObserver:self forKeyPath:timedMetadata options:NSKeyValueObservingOptionNew context:nil];
- _playerItemObserversSet = YES;
-}
-
-/* Fixes https://github.com/brentvatne/react-native-video/issues/43
- * Crashes caused when trying to remove the observer when there is no
- * observer set */
-- (void)removePlayerItemObservers
-{
- if (_playerItemObserversSet) {
- [_playerItem removeObserver:self forKeyPath:statusKeyPath];
- [_playerItem removeObserver:self forKeyPath:playbackBufferEmptyKeyPath];
- [_playerItem removeObserver:self forKeyPath:playbackLikelyToKeepUpKeyPath];
- [_playerItem removeObserver:self forKeyPath:timedMetadata];
- _playerItemObserversSet = NO;
- }
-}
-
-#pragma mark - Player and source
-
-- (void)setSrc:(NSDictionary *)source
-{
- _source = source;
- [self removePlayerLayer];
- [self removePlayerTimeObserver];
- [self removePlayerItemObservers];
-
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t) 0), dispatch_get_main_queue(), ^{
-
- // perform on next run loop, otherwise other passed react-props may not be set
- [self playerItemForSource:source withCallback:^(AVPlayerItem * playerItem) {
- _playerItem = playerItem;
- [self addPlayerItemObservers];
- [self setFilter:_filterName];
- [self setMaxBitRate:_maxBitRate];
-
- [_player pause];
-
- if (_playbackRateObserverRegistered) {
- [_player removeObserver:self forKeyPath:playbackRate context:nil];
- _playbackRateObserverRegistered = NO;
- }
- if (_isExternalPlaybackActiveObserverRegistered) {
- [_player removeObserver:self forKeyPath:externalPlaybackActive context:nil];
- _isExternalPlaybackActiveObserverRegistered = NO;
- }
-
- _player = [AVPlayer playerWithPlayerItem:_playerItem];
- _player.actionAtItemEnd = AVPlayerActionAtItemEndNone;
-
- [_player addObserver:self forKeyPath:playbackRate options:0 context:nil];
- _playbackRateObserverRegistered = YES;
-
- [_player addObserver:self forKeyPath:externalPlaybackActive options:0 context:nil];
- _isExternalPlaybackActiveObserverRegistered = YES;
-
- [self addPlayerTimeObserver];
- if (@available(iOS 10.0, *)) {
- [self setAutomaticallyWaitsToMinimizeStalling:_automaticallyWaitsToMinimizeStalling];
- }
-
- //Perform on next run loop, otherwise onVideoLoadStart is nil
- if (self.onVideoLoadStart) {
- id uri = [source objectForKey:@"uri"];
- id type = [source objectForKey:@"type"];
- self.onVideoLoadStart(@{@"src": @{
- @"uri": uri ? uri : [NSNull null],
- @"type": type ? type : [NSNull null],
- @"isNetwork": [NSNumber numberWithBool:(bool)[source objectForKey:@"isNetwork"]]},
- @"target": self.reactTag
- });
- }
- }];
- });
- _videoLoadStarted = YES;
-}
-
-- (NSURL*) urlFilePath:(NSString*) filepath {
- if ([filepath containsString:@"file://"]) {
- return [NSURL URLWithString:filepath];
- }
-
- // if no file found, check if the file exists in the Document directory
- NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
- NSString* relativeFilePath = [filepath lastPathComponent];
- // the file may be multiple levels below the documents directory
- NSArray* fileComponents = [filepath componentsSeparatedByString:@"Documents/"];
- if (fileComponents.count > 1) {
- relativeFilePath = [fileComponents objectAtIndex:1];
- }
-
- NSString *path = [paths.firstObject stringByAppendingPathComponent:relativeFilePath];
- if ([[NSFileManager defaultManager] fileExistsAtPath:path]) {
- return [NSURL fileURLWithPath:path];
- }
- return nil;
-}
-
-- (void)playerItemPrepareText:(AVAsset *)asset assetOptions:(NSDictionary * __nullable)assetOptions withCallback:(void(^)(AVPlayerItem *))handler
-{
- if (!_textTracks || _textTracks.count==0) {
- handler([AVPlayerItem playerItemWithAsset:asset]);
- return;
- }
-
- // AVPlayer can't airplay AVMutableCompositions
- _allowsExternalPlayback = NO;
-
- // sideload text tracks
- AVMutableComposition *mixComposition = [[AVMutableComposition alloc] init];
-
- AVAssetTrack *videoAsset = [asset tracksWithMediaType:AVMediaTypeVideo].firstObject;
- AVMutableCompositionTrack *videoCompTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
- [videoCompTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.timeRange.duration)
- ofTrack:videoAsset
- atTime:kCMTimeZero
- error:nil];
-
- AVAssetTrack *audioAsset = [asset tracksWithMediaType:AVMediaTypeAudio].firstObject;
- AVMutableCompositionTrack *audioCompTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
- [audioCompTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.timeRange.duration)
- ofTrack:audioAsset
- atTime:kCMTimeZero
- error:nil];
-
- NSMutableArray* validTextTracks = [NSMutableArray array];
- for (int i = 0; i < _textTracks.count; ++i) {
- AVURLAsset *textURLAsset;
- NSString *textUri = [_textTracks objectAtIndex:i][@"uri"];
- if ([[textUri lowercaseString] hasPrefix:@"http"]) {
- textURLAsset = [AVURLAsset URLAssetWithURL:[NSURL URLWithString:textUri] options:assetOptions];
- } else {
- textURLAsset = [AVURLAsset URLAssetWithURL:[self urlFilePath:textUri] options:nil];
- }
- AVAssetTrack *textTrackAsset = [textURLAsset tracksWithMediaType:AVMediaTypeText].firstObject;
- if (!textTrackAsset) continue; // fix when there's no textTrackAsset
- [validTextTracks addObject:[_textTracks objectAtIndex:i]];
- AVMutableCompositionTrack *textCompTrack = [mixComposition
- addMutableTrackWithMediaType:AVMediaTypeText
- preferredTrackID:kCMPersistentTrackID_Invalid];
- [textCompTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.timeRange.duration)
- ofTrack:textTrackAsset
- atTime:kCMTimeZero
- error:nil];
- }
- if (validTextTracks.count != _textTracks.count) {
- [self setTextTracks:validTextTracks];
- }
-
- handler([AVPlayerItem playerItemWithAsset:mixComposition]);
-}
-
-- (void)playerItemForSource:(NSDictionary *)source withCallback:(void(^)(AVPlayerItem *))handler
-{
- bool isNetwork = [RCTConvert BOOL:[source objectForKey:@"isNetwork"]];
- bool isAsset = [RCTConvert BOOL:[source objectForKey:@"isAsset"]];
- bool shouldCache = [RCTConvert BOOL:[source objectForKey:@"shouldCache"]];
- NSString *uri = [source objectForKey:@"uri"];
- NSString *type = [source objectForKey:@"type"];
- if (!uri || [uri isEqualToString:@""]) {
- DebugLog(@"Could not find video URL in source '%@'", source);
- return;
- }
-
- NSURL *url = isNetwork || isAsset
- ? [NSURL URLWithString:uri]
- : [[NSURL alloc] initFileURLWithPath:[[NSBundle mainBundle] pathForResource:uri ofType:type]];
- NSMutableDictionary *assetOptions = [[NSMutableDictionary alloc] init];
-
- if (isNetwork) {
- /* Per #1091, this is not a public API.
- * We need to either get approval from Apple to use this or use a different approach.
- NSDictionary *headers = [source objectForKey:@"requestHeaders"];
- if ([headers count] > 0) {
- [assetOptions setObject:headers forKey:@"AVURLAssetHTTPHeaderFieldsKey"];
- }
- */
- NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies];
- [assetOptions setObject:cookies forKey:AVURLAssetHTTPCookiesKey];
-
-#if __has_include()
- if (shouldCache && (!_textTracks || !_textTracks.count)) {
- /* The DVURLAsset created by cache doesn't have a tracksWithMediaType property, so trying
- * to bring in the text track code will crash. I suspect this is because the asset hasn't fully loaded.
- * Until this is fixed, we need to bypass caching when text tracks are specified.
- */
- DebugLog(@"Caching is not supported for uri '%@' because text tracks are not compatible with the cache. Checkout https://github.com/react-native-community/react-native-video/blob/master/docs/caching.md", uri);
- [self playerItemForSourceUsingCache:uri assetOptions:assetOptions withCallback:handler];
- return;
- }
-#endif
-
- AVURLAsset *asset = [AVURLAsset URLAssetWithURL:url options:assetOptions];
- [self playerItemPrepareText:asset assetOptions:assetOptions withCallback:handler];
- return;
- } else if (isAsset) {
- AVURLAsset *asset = [AVURLAsset URLAssetWithURL:url options:nil];
- [self playerItemPrepareText:asset assetOptions:assetOptions withCallback:handler];
- return;
- }
-
- AVURLAsset *asset = [AVURLAsset URLAssetWithURL:[[NSURL alloc] initFileURLWithPath:[[NSBundle mainBundle] pathForResource:uri ofType:type]] options:nil];
- [self playerItemPrepareText:asset assetOptions:assetOptions withCallback:handler];
-}
-
-#if __has_include()
-
-- (void)playerItemForSourceUsingCache:(NSString *)uri assetOptions:(NSDictionary *)options withCallback:(void(^)(AVPlayerItem *))handler {
- NSURL *url = [NSURL URLWithString:uri];
- [_videoCache getItemForUri:uri withCallback:^(RCTVideoCacheStatus videoCacheStatus, AVAsset * _Nullable cachedAsset) {
- switch (videoCacheStatus) {
- case RCTVideoCacheStatusMissingFileExtension: {
- DebugLog(@"Could not generate cache key for uri '%@'. It is currently not supported to cache urls that do not include a file extension. The video file will not be cached. Checkout https://github.com/react-native-community/react-native-video/blob/master/docs/caching.md", uri);
- AVURLAsset *asset = [AVURLAsset URLAssetWithURL:url options:options];
- [self playerItemPrepareText:asset assetOptions:options withCallback:handler];
- return;
- }
- case RCTVideoCacheStatusUnsupportedFileExtension: {
- DebugLog(@"Could not generate cache key for uri '%@'. The file extension of that uri is currently not supported. The video file will not be cached. Checkout https://github.com/react-native-community/react-native-video/blob/master/docs/caching.md", uri);
- AVURLAsset *asset = [AVURLAsset URLAssetWithURL:url options:options];
- [self playerItemPrepareText:asset assetOptions:options withCallback:handler];
- return;
- }
- default:
- if (cachedAsset) {
- DebugLog(@"Playing back uri '%@' from cache", uri);
- // See note in playerItemForSource about not being able to support text tracks & caching
- handler([AVPlayerItem playerItemWithAsset:cachedAsset]);
- return;
- }
- }
-
- DVURLAsset *asset = [[DVURLAsset alloc] initWithURL:url options:options networkTimeout:10000];
- asset.loaderDelegate = self;
-
- /* More granular code to have control over the DVURLAsset
- DVAssetLoaderDelegate *resourceLoaderDelegate = [[DVAssetLoaderDelegate alloc] initWithURL:url];
- resourceLoaderDelegate.delegate = self;
- NSURLComponents *components = [[NSURLComponents alloc] initWithURL:url resolvingAgainstBaseURL:NO];
- components.scheme = [DVAssetLoaderDelegate scheme];
- AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:[components URL] options:options];
- [asset.resourceLoader setDelegate:resourceLoaderDelegate queue:dispatch_get_main_queue()];
- */
-
- handler([AVPlayerItem playerItemWithAsset:asset]);
- }];
-}
-
-#pragma mark - DVAssetLoaderDelegate
-
-- (void)dvAssetLoaderDelegate:(DVAssetLoaderDelegate *)loaderDelegate
- didLoadData:(NSData *)data
- forURL:(NSURL *)url {
- [_videoCache storeItem:data forUri:[url absoluteString] withCallback:^(BOOL success) {
- DebugLog(@"Cache data stored successfully 🎉");
- }];
-}
-
-#endif
-
-- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
-{
-
- if([keyPath isEqualToString:readyForDisplayKeyPath] && [change objectForKey:NSKeyValueChangeNewKey] && self.onReadyForDisplay) {
- self.onReadyForDisplay(@{@"target": self.reactTag});
- return;
- }
- if (object == _playerItem) {
- // When timeMetadata is read the event onTimedMetadata is triggered
- if ([keyPath isEqualToString:timedMetadata]) {
- NSArray *items = [change objectForKey:@"new"];
- if (items && ![items isEqual:[NSNull null]] && items.count > 0) {
- NSMutableArray *array = [NSMutableArray new];
- for (AVMetadataItem *item in items) {
- NSString *value = (NSString *)item.value;
- NSString *identifier = item.identifier;
-
- if (![value isEqual: [NSNull null]]) {
- NSDictionary *dictionary = [[NSDictionary alloc] initWithObjects:@[value, identifier] forKeys:@[@"value", @"identifier"]];
-
- [array addObject:dictionary];
- }
- }
-
- self.onTimedMetadata(@{
- @"target": self.reactTag,
- @"metadata": array
- });
- }
- }
-
- if ([keyPath isEqualToString:statusKeyPath]) {
- // Handle player item status change.
- if (_playerItem.status == AVPlayerItemStatusReadyToPlay) {
- float duration = CMTimeGetSeconds(_playerItem.asset.duration);
-
- if (isnan(duration)) {
- duration = 0.0;
- }
-
- NSObject *width = @"undefined";
- NSObject *height = @"undefined";
- NSString *orientation = @"undefined";
-
- if ([_playerItem.asset tracksWithMediaType:AVMediaTypeVideo].count > 0) {
- AVAssetTrack *videoTrack = [[_playerItem.asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];
- width = [NSNumber numberWithFloat:videoTrack.naturalSize.width];
- height = [NSNumber numberWithFloat:videoTrack.naturalSize.height];
- CGAffineTransform preferredTransform = [videoTrack preferredTransform];
-
- if ((videoTrack.naturalSize.width == preferredTransform.tx
- && videoTrack.naturalSize.height == preferredTransform.ty)
- || (preferredTransform.tx == 0 && preferredTransform.ty == 0))
- {
- orientation = @"landscape";
- } else {
- orientation = @"portrait";
- }
- }
-
- if (self.onVideoLoad && _videoLoadStarted) {
- self.onVideoLoad(@{@"duration": [NSNumber numberWithFloat:duration],
- @"currentTime": [NSNumber numberWithFloat:CMTimeGetSeconds(_playerItem.currentTime)],
- @"canPlayReverse": [NSNumber numberWithBool:_playerItem.canPlayReverse],
- @"canPlayFastForward": [NSNumber numberWithBool:_playerItem.canPlayFastForward],
- @"canPlaySlowForward": [NSNumber numberWithBool:_playerItem.canPlaySlowForward],
- @"canPlaySlowReverse": [NSNumber numberWithBool:_playerItem.canPlaySlowReverse],
- @"canStepBackward": [NSNumber numberWithBool:_playerItem.canStepBackward],
- @"canStepForward": [NSNumber numberWithBool:_playerItem.canStepForward],
- @"naturalSize": @{
- @"width": width,
- @"height": height,
- @"orientation": orientation
- },
- @"audioTracks": [self getAudioTrackInfo],
- @"textTracks": [self getTextTrackInfo],
- @"target": self.reactTag});
- }
- _videoLoadStarted = NO;
-
- [self attachListeners];
- [self applyModifiers];
- } else if (_playerItem.status == AVPlayerItemStatusFailed && self.onVideoError) {
- self.onVideoError(@{@"error": @{@"code": [NSNumber numberWithInteger: _playerItem.error.code],
- @"domain": _playerItem.error.domain},
- @"target": self.reactTag});
- }
- } else if ([keyPath isEqualToString:playbackBufferEmptyKeyPath]) {
- _playerBufferEmpty = YES;
- self.onVideoBuffer(@{@"isBuffering": @(YES), @"target": self.reactTag});
- } else if ([keyPath isEqualToString:playbackLikelyToKeepUpKeyPath]) {
- // Continue playing (or not if paused) after being paused due to hitting an unbuffered zone.
- if ((!(_controls || _fullscreenPlayerPresented) || _playerBufferEmpty) && _playerItem.playbackLikelyToKeepUp) {
- [self setPaused:_paused];
- }
- _playerBufferEmpty = NO;
- self.onVideoBuffer(@{@"isBuffering": @(NO), @"target": self.reactTag});
- }
- } else if (object == _player) {
- if([keyPath isEqualToString:playbackRate]) {
- if(self.onPlaybackRateChange) {
- self.onPlaybackRateChange(@{@"playbackRate": [NSNumber numberWithFloat:_player.rate],
- @"target": self.reactTag});
- }
- if(_playbackStalled && _player.rate > 0) {
- if(self.onPlaybackResume) {
- self.onPlaybackResume(@{@"playbackRate": [NSNumber numberWithFloat:_player.rate],
- @"target": self.reactTag});
- }
- _playbackStalled = NO;
- }
- }
- else if([keyPath isEqualToString:externalPlaybackActive]) {
- if(self.onVideoExternalPlaybackChange) {
- self.onVideoExternalPlaybackChange(@{@"isExternalPlaybackActive": [NSNumber numberWithBool:_player.isExternalPlaybackActive],
- @"target": self.reactTag});
- }
- }
- } else if (object == _playerViewController.contentOverlayView) {
- // when controls==true, this is a hack to reset the rootview when rotation happens in fullscreen
- if ([keyPath isEqualToString:@"frame"]) {
-
- CGRect oldRect = [change[NSKeyValueChangeOldKey] CGRectValue];
- CGRect newRect = [change[NSKeyValueChangeNewKey] CGRectValue];
-
- if (!CGRectEqualToRect(oldRect, newRect)) {
- if (CGRectEqualToRect(newRect, [UIScreen mainScreen].bounds)) {
- NSLog(@"in fullscreen");
- } else NSLog(@"not fullscreen");
-
- [self.reactViewController.view setFrame:[UIScreen mainScreen].bounds];
- [self.reactViewController.view setNeedsLayout];
- }
-
- return;
- }
- }
-}
-
-- (void)attachListeners
-{
- // listen for end of file
- [[NSNotificationCenter defaultCenter] removeObserver:self
- name:AVPlayerItemDidPlayToEndTimeNotification
- object:[_player currentItem]];
- [[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(playerItemDidReachEnd:)
- name:AVPlayerItemDidPlayToEndTimeNotification
- object:[_player currentItem]];
-
- [[NSNotificationCenter defaultCenter] removeObserver:self
- name:AVPlayerItemPlaybackStalledNotification
- object:nil];
- [[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(playbackStalled:)
- name:AVPlayerItemPlaybackStalledNotification
- object:nil];
-
- [[NSNotificationCenter defaultCenter] removeObserver:self
- name:AVPlayerItemNewAccessLogEntryNotification
- object:nil];
- [[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(handleAVPlayerAccess:)
- name:AVPlayerItemNewAccessLogEntryNotification
- object:nil];
-
-}
-
-- (void)handleAVPlayerAccess:(NSNotification *)notification {
- AVPlayerItemAccessLog *accessLog = [((AVPlayerItem *)notification.object) accessLog];
- AVPlayerItemAccessLogEvent *lastEvent = accessLog.events.lastObject;
-
- /* TODO: get this working
- if (self.onBandwidthUpdate) {
- self.onBandwidthUpdate(@{@"bitrate": [NSNumber numberWithFloat:lastEvent.observedBitrate]});
- }
- */
-}
-
-- (void)playbackStalled:(NSNotification *)notification
-{
- if(self.onPlaybackStalled) {
- self.onPlaybackStalled(@{@"target": self.reactTag});
- }
- _playbackStalled = YES;
-}
-
-- (void)playerItemDidReachEnd:(NSNotification *)notification
-{
- if(self.onVideoEnd) {
- self.onVideoEnd(@{@"target": self.reactTag});
- }
-
- if (_repeat) {
- AVPlayerItem *item = [notification object];
- [item seekToTime:kCMTimeZero];
- [self applyModifiers];
- } else {
- [self removePlayerTimeObserver];
- }
-}
-
-#pragma mark - Prop setters
-
-- (void)setResizeMode:(NSString*)mode
-{
- if( _controls )
- {
- _playerViewController.videoGravity = mode;
- }
- else
- {
- _playerLayer.videoGravity = mode;
- }
- _resizeMode = mode;
-}
-
-- (void)setPlayInBackground:(BOOL)playInBackground
-{
- _playInBackground = playInBackground;
-}
-
-- (void)setAllowsExternalPlayback:(BOOL)allowsExternalPlayback
-{
- _allowsExternalPlayback = allowsExternalPlayback;
- _player.allowsExternalPlayback = _allowsExternalPlayback;
-}
-
-- (void)setPlayWhenInactive:(BOOL)playWhenInactive
-{
- _playWhenInactive = playWhenInactive;
-}
-
-- (void)setPictureInPicture:(BOOL)pictureInPicture
-{
- #if TARGET_OS_IOS
- if (_pictureInPicture == pictureInPicture) {
- return;
- }
-
- _pictureInPicture = pictureInPicture;
- if (_pipController && _pictureInPicture && ![_pipController isPictureInPictureActive]) {
- dispatch_async(dispatch_get_main_queue(), ^{
- [_pipController startPictureInPicture];
- });
- } else if (_pipController && !_pictureInPicture && [_pipController isPictureInPictureActive]) {
- dispatch_async(dispatch_get_main_queue(), ^{
- [_pipController stopPictureInPicture];
- });
- }
- #endif
-}
-
-#if TARGET_OS_IOS
-- (void)setRestoreUserInterfaceForPIPStopCompletionHandler:(BOOL)restore
-{
- if (_restoreUserInterfaceForPIPStopCompletionHandler != NULL) {
- _restoreUserInterfaceForPIPStopCompletionHandler(restore);
- _restoreUserInterfaceForPIPStopCompletionHandler = NULL;
- }
-}
-
-- (void)setupPipController {
- if (!_pipController && _playerLayer && [AVPictureInPictureController isPictureInPictureSupported]) {
- // Create new controller passing reference to the AVPlayerLayer
- _pipController = [[AVPictureInPictureController alloc] initWithPlayerLayer:_playerLayer];
- _pipController.delegate = self;
- }
-}
-#endif
-
-- (void)setIgnoreSilentSwitch:(NSString *)ignoreSilentSwitch
-{
- _ignoreSilentSwitch = ignoreSilentSwitch;
- [self applyModifiers];
-}
-
-- (void)setPaused:(BOOL)paused
-{
- if (paused) {
- [_player pause];
- [_player setRate:0.0];
- } else {
- if([_ignoreSilentSwitch isEqualToString:@"ignore"]) {
- [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
- } else if([_ignoreSilentSwitch isEqualToString:@"obey"]) {
- [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil];
- }
-
- if (@available(iOS 10.0, *) && !_automaticallyWaitsToMinimizeStalling) {
- [_player playImmediatelyAtRate:_rate];
- } else {
- [_player play];
- [_player setRate:_rate];
- }
- [_player setRate:_rate];
- }
-
- _paused = paused;
-}
-
-- (float)getCurrentTime
-{
- return _playerItem != NULL ? CMTimeGetSeconds(_playerItem.currentTime) : 0;
-}
-
-- (void)setCurrentTime:(float)currentTime
-{
- NSDictionary *info = @{
- @"time": [NSNumber numberWithFloat:currentTime],
- @"tolerance": [NSNumber numberWithInt:100]
- };
- [self setSeek:info];
-}
-
-- (void)setSeek:(NSDictionary *)info
-{
- NSNumber *seekTime = info[@"time"];
- NSNumber *seekTolerance = info[@"tolerance"];
-
- int timeScale = 1000;
-
- AVPlayerItem *item = _player.currentItem;
- if (item && item.status == AVPlayerItemStatusReadyToPlay) {
- // TODO check loadedTimeRanges
-
- CMTime cmSeekTime = CMTimeMakeWithSeconds([seekTime floatValue], timeScale);
- CMTime current = item.currentTime;
- // TODO figure out a good tolerance level
- CMTime tolerance = CMTimeMake([seekTolerance floatValue], timeScale);
- BOOL wasPaused = _paused;
-
- if (CMTimeCompare(current, cmSeekTime) != 0) {
- if (!wasPaused) [_player pause];
- [_player seekToTime:cmSeekTime toleranceBefore:tolerance toleranceAfter:tolerance completionHandler:^(BOOL finished) {
- if (!_timeObserver) {
- [self addPlayerTimeObserver];
- }
- if (!wasPaused) {
- [self setPaused:false];
- }
- if(self.onVideoSeek) {
- self.onVideoSeek(@{@"currentTime": [NSNumber numberWithFloat:CMTimeGetSeconds(item.currentTime)],
- @"seekTime": seekTime,
- @"target": self.reactTag});
- }
- }];
-
- _pendingSeek = false;
- }
-
- } else {
- // TODO: See if this makes sense and if so, actually implement it
- _pendingSeek = true;
- _pendingSeekTime = [seekTime floatValue];
- }
-}
-
-- (void)setRate:(float)rate
-{
- _rate = rate;
- [self applyModifiers];
-}
-
-- (void)setMuted:(BOOL)muted
-{
- _muted = muted;
- [self applyModifiers];
-}
-
-- (void)setVolume:(float)volume
-{
- _volume = volume;
- [self applyModifiers];
-}
-
-- (void)setMaxBitRate:(float) maxBitRate {
- _maxBitRate = maxBitRate;
- _playerItem.preferredPeakBitRate = maxBitRate;
-}
-
-- (void)setAutomaticallyWaitsToMinimizeStalling:(BOOL)waits
-{
- _automaticallyWaitsToMinimizeStalling = waits;
- _player.automaticallyWaitsToMinimizeStalling = waits;
-}
-
-
-- (void)applyModifiers
-{
- if (_muted) {
- if (!_controls) {
- [_player setVolume:0];
- }
- [_player setMuted:YES];
- } else {
- [_player setVolume:_volume];
- [_player setMuted:NO];
- }
-
- [self setMaxBitRate:_maxBitRate];
- [self setSelectedAudioTrack:_selectedAudioTrack];
- [self setSelectedTextTrack:_selectedTextTrack];
- [self setResizeMode:_resizeMode];
- [self setRepeat:_repeat];
- [self setPaused:_paused];
- [self setControls:_controls];
- [self setAllowsExternalPlayback:_allowsExternalPlayback];
-}
-
-- (void)setRepeat:(BOOL)repeat {
- _repeat = repeat;
-}
-
-- (void)setMediaSelectionTrackForCharacteristic:(AVMediaCharacteristic)characteristic
- withCriteria:(NSDictionary *)criteria
-{
- NSString *type = criteria[@"type"];
- AVMediaSelectionGroup *group = [_player.currentItem.asset
- mediaSelectionGroupForMediaCharacteristic:characteristic];
- AVMediaSelectionOption *mediaOption;
-
- if ([type isEqualToString:@"disabled"]) {
- // Do nothing. We want to ensure option is nil
- } else if ([type isEqualToString:@"language"] || [type isEqualToString:@"title"]) {
- NSString *value = criteria[@"value"];
- for (int i = 0; i < group.options.count; ++i) {
- AVMediaSelectionOption *currentOption = [group.options objectAtIndex:i];
- NSString *optionValue;
- if ([type isEqualToString:@"language"]) {
- optionValue = [currentOption extendedLanguageTag];
- } else {
- optionValue = [[[currentOption commonMetadata]
- valueForKey:@"value"]
- objectAtIndex:0];
- }
- if ([value isEqualToString:optionValue]) {
- mediaOption = currentOption;
- break;
- }
- }
- //} else if ([type isEqualToString:@"default"]) {
- // option = group.defaultOption; */
- } else if ([type isEqualToString:@"index"]) {
- if ([criteria[@"value"] isKindOfClass:[NSNumber class]]) {
- int index = [criteria[@"value"] intValue];
- if (group.options.count > index) {
- mediaOption = [group.options objectAtIndex:index];
- }
- }
- } else { // default. invalid type or "system"
- [_player.currentItem selectMediaOptionAutomaticallyInMediaSelectionGroup:group];
- return;
- }
-
- // If a match isn't found, option will be nil and text tracks will be disabled
- [_player.currentItem selectMediaOption:mediaOption inMediaSelectionGroup:group];
-}
-
-- (void)setSelectedAudioTrack:(NSDictionary *)selectedAudioTrack {
- _selectedAudioTrack = selectedAudioTrack;
- [self setMediaSelectionTrackForCharacteristic:AVMediaCharacteristicAudible
- withCriteria:_selectedAudioTrack];
-}
-
-- (void)setSelectedTextTrack:(NSDictionary *)selectedTextTrack {
- _selectedTextTrack = selectedTextTrack;
- if (_textTracks) { // sideloaded text tracks
- [self setSideloadedText];
- } else { // text tracks included in the HLS playlist
- [self setMediaSelectionTrackForCharacteristic:AVMediaCharacteristicLegible
- withCriteria:_selectedTextTrack];
- }
-}
-
-- (void) setSideloadedText {
- NSString *type = _selectedTextTrack[@"type"];
- NSArray *textTracks = [self getTextTrackInfo];
-
- // The first few tracks will be audio & video track
- int firstTextIndex = 0;
- for (firstTextIndex = 0; firstTextIndex < _player.currentItem.tracks.count; ++firstTextIndex) {
- if ([_player.currentItem.tracks[firstTextIndex].assetTrack hasMediaCharacteristic:AVMediaCharacteristicLegible]) {
- break;
- }
- }
-
- int selectedTrackIndex = RCTVideoUnset;
-
- if ([type isEqualToString:@"disabled"]) {
- // Do nothing. We want to ensure option is nil
- } else if ([type isEqualToString:@"language"]) {
- NSString *selectedValue = _selectedTextTrack[@"value"];
- for (int i = 0; i < textTracks.count; ++i) {
- NSDictionary *currentTextTrack = [textTracks objectAtIndex:i];
- if ([selectedValue isEqualToString:currentTextTrack[@"language"]]) {
- selectedTrackIndex = i;
- break;
- }
- }
- } else if ([type isEqualToString:@"title"]) {
- NSString *selectedValue = _selectedTextTrack[@"value"];
- for (int i = 0; i < textTracks.count; ++i) {
- NSDictionary *currentTextTrack = [textTracks objectAtIndex:i];
- if ([selectedValue isEqualToString:currentTextTrack[@"title"]]) {
- selectedTrackIndex = i;
- break;
- }
- }
- } else if ([type isEqualToString:@"index"]) {
- if ([_selectedTextTrack[@"value"] isKindOfClass:[NSNumber class]]) {
- int index = [_selectedTextTrack[@"value"] intValue];
- if (textTracks.count > index) {
- selectedTrackIndex = index;
- }
- }
- }
-
- // in the situation that a selected text track is not available (eg. specifies a textTrack not available)
- if (![type isEqualToString:@"disabled"] && selectedTrackIndex == RCTVideoUnset) {
- CFArrayRef captioningMediaCharacteristics = MACaptionAppearanceCopyPreferredCaptioningMediaCharacteristics(kMACaptionAppearanceDomainUser);
- NSArray *captionSettings = (__bridge NSArray*)captioningMediaCharacteristics;
- if ([captionSettings containsObject:AVMediaCharacteristicTranscribesSpokenDialogForAccessibility]) {
- selectedTrackIndex = 0; // If we can't find a match, use the first available track
- NSString *systemLanguage = [[NSLocale preferredLanguages] firstObject];
- for (int i = 0; i < textTracks.count; ++i) {
- NSDictionary *currentTextTrack = [textTracks objectAtIndex:i];
- if ([systemLanguage isEqualToString:currentTextTrack[@"language"]]) {
- selectedTrackIndex = i;
- break;
- }
- }
- }
- }
-
- for (int i = firstTextIndex; i < _player.currentItem.tracks.count; ++i) {
- BOOL isEnabled = NO;
- if (selectedTrackIndex != RCTVideoUnset) {
- isEnabled = i == selectedTrackIndex + firstTextIndex;
- }
- [_player.currentItem.tracks[i] setEnabled:isEnabled];
- }
-}
-
--(void) setStreamingText {
- NSString *type = _selectedTextTrack[@"type"];
- AVMediaSelectionGroup *group = [_player.currentItem.asset
- mediaSelectionGroupForMediaCharacteristic:AVMediaCharacteristicLegible];
- AVMediaSelectionOption *mediaOption;
-
- if ([type isEqualToString:@"disabled"]) {
- // Do nothing. We want to ensure option is nil
- } else if ([type isEqualToString:@"language"] || [type isEqualToString:@"title"]) {
- NSString *value = _selectedTextTrack[@"value"];
- for (int i = 0; i < group.options.count; ++i) {
- AVMediaSelectionOption *currentOption = [group.options objectAtIndex:i];
- NSString *optionValue;
- if ([type isEqualToString:@"language"]) {
- optionValue = [currentOption extendedLanguageTag];
- } else {
- optionValue = [[[currentOption commonMetadata]
- valueForKey:@"value"]
- objectAtIndex:0];
- }
- if ([value isEqualToString:optionValue]) {
- mediaOption = currentOption;
- break;
- }
- }
- //} else if ([type isEqualToString:@"default"]) {
- // option = group.defaultOption; */
- } else if ([type isEqualToString:@"index"]) {
- if ([_selectedTextTrack[@"value"] isKindOfClass:[NSNumber class]]) {
- int index = [_selectedTextTrack[@"value"] intValue];
- if (group.options.count > index) {
- mediaOption = [group.options objectAtIndex:index];
- }
- }
- } else { // default. invalid type or "system"
- [_player.currentItem selectMediaOptionAutomaticallyInMediaSelectionGroup:group];
- return;
- }
-
- // If a match isn't found, option will be nil and text tracks will be disabled
- [_player.currentItem selectMediaOption:mediaOption inMediaSelectionGroup:group];
-}
-
-- (void)setTextTracks:(NSArray*) textTracks;
-{
- _textTracks = textTracks;
-
- // in case textTracks was set after selectedTextTrack
- if (_selectedTextTrack) [self setSelectedTextTrack:_selectedTextTrack];
-}
-
-- (NSArray *)getAudioTrackInfo
-{
- NSMutableArray *audioTracks = [[NSMutableArray alloc] init];
- AVMediaSelectionGroup *group = [_player.currentItem.asset
- mediaSelectionGroupForMediaCharacteristic:AVMediaCharacteristicAudible];
- for (int i = 0; i < group.options.count; ++i) {
- AVMediaSelectionOption *currentOption = [group.options objectAtIndex:i];
- NSString *title = @"";
- NSArray *values = [[currentOption commonMetadata] valueForKey:@"value"];
- if (values.count > 0) {
- title = [values objectAtIndex:0];
- }
- NSString *language = [currentOption extendedLanguageTag] ? [currentOption extendedLanguageTag] : @"";
- NSDictionary *audioTrack = @{
- @"index": [NSNumber numberWithInt:i],
- @"title": title,
- @"language": language
- };
- [audioTracks addObject:audioTrack];
- }
- return audioTracks;
-}
-
-- (NSArray *)getTextTrackInfo
-{
- // if sideloaded, textTracks will already be set
- if (_textTracks) return _textTracks;
-
- // if streaming video, we extract the text tracks
- NSMutableArray *textTracks = [[NSMutableArray alloc] init];
- AVMediaSelectionGroup *group = [_player.currentItem.asset
- mediaSelectionGroupForMediaCharacteristic:AVMediaCharacteristicLegible];
- for (int i = 0; i < group.options.count; ++i) {
- AVMediaSelectionOption *currentOption = [group.options objectAtIndex:i];
- NSString *title = @"";
- NSArray *values = [[currentOption commonMetadata] valueForKey:@"value"];
- if (values.count > 0) {
- title = [values objectAtIndex:0];
- }
- NSString *language = [currentOption extendedLanguageTag] ? [currentOption extendedLanguageTag] : @"";
- NSDictionary *textTrack = @{
- @"index": [NSNumber numberWithInt:i],
- @"title": title,
- @"language": language
- };
- [textTracks addObject:textTrack];
- }
- return textTracks;
-}
-
-- (BOOL)getFullscreen
-{
- return _fullscreenPlayerPresented;
-}
-
-- (void)setFullscreen:(BOOL) fullscreen {
- if( fullscreen && !_fullscreenPlayerPresented && _player )
- {
- // Ensure player view controller is not null
- if( !_playerViewController )
- {
- [self usePlayerViewController];
- }
- // Set presentation style to fullscreen
- [_playerViewController setModalPresentationStyle:UIModalPresentationFullScreen];
-
- // Find the nearest view controller
- UIViewController *viewController = [self firstAvailableUIViewController];
- if( !viewController )
- {
- UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
- viewController = keyWindow.rootViewController;
- if( viewController.childViewControllers.count > 0 )
- {
- viewController = viewController.childViewControllers.lastObject;
- }
- }
- if( viewController )
- {
- _presentingViewController = viewController;
- if(self.onVideoFullscreenPlayerWillPresent) {
- self.onVideoFullscreenPlayerWillPresent(@{@"target": self.reactTag});
- }
- [viewController presentViewController:_playerViewController animated:true completion:^{
- _playerViewController.showsPlaybackControls = YES;
- _fullscreenPlayerPresented = fullscreen;
- _playerViewController.autorotate = _fullscreenAutorotate;
- if(self.onVideoFullscreenPlayerDidPresent) {
- self.onVideoFullscreenPlayerDidPresent(@{@"target": self.reactTag});
- }
- }];
- }
- }
- else if ( !fullscreen && _fullscreenPlayerPresented )
- {
- [self videoPlayerViewControllerWillDismiss:_playerViewController];
- [_presentingViewController dismissViewControllerAnimated:true completion:^{
- [self videoPlayerViewControllerDidDismiss:_playerViewController];
- }];
- }
-}
-
-- (void)setFullscreenAutorotate:(BOOL)autorotate {
- _fullscreenAutorotate = autorotate;
- if (_fullscreenPlayerPresented) {
- _playerViewController.autorotate = autorotate;
- }
-}
-
-- (void)setFullscreenOrientation:(NSString *)orientation {
- _fullscreenOrientation = orientation;
- if (_fullscreenPlayerPresented) {
- _playerViewController.preferredOrientation = orientation;
- }
-}
-
-- (void)usePlayerViewController
-{
- if( _player )
- {
- if (!_playerViewController) {
- _playerViewController = [self createPlayerViewController:_player withPlayerItem:_playerItem];
- }
- // to prevent video from being animated when resizeMode is 'cover'
- // resize mode must be set before subview is added
- [self setResizeMode:_resizeMode];
-
- if (_controls) {
- UIViewController *viewController = [self reactViewController];
- [viewController addChildViewController:_playerViewController];
- [self addSubview:_playerViewController.view];
- }
-
- [_playerViewController addObserver:self forKeyPath:readyForDisplayKeyPath options:NSKeyValueObservingOptionNew context:nil];
-
- [_playerViewController.contentOverlayView addObserver:self forKeyPath:@"frame" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:NULL];
- }
-}
-
-- (void)usePlayerLayer
-{
- if( _player )
- {
- _playerLayer = [AVPlayerLayer playerLayerWithPlayer:_player];
- _playerLayer.frame = self.bounds;
- _playerLayer.needsDisplayOnBoundsChange = YES;
-
- // to prevent video from being animated when resizeMode is 'cover'
- // resize mode must be set before layer is added
- [self setResizeMode:_resizeMode];
- [_playerLayer addObserver:self forKeyPath:readyForDisplayKeyPath options:NSKeyValueObservingOptionNew context:nil];
- _playerLayerObserverSet = YES;
-
- [self.layer addSublayer:_playerLayer];
- self.layer.needsDisplayOnBoundsChange = YES;
- #if TARGET_OS_IOS
- [self setupPipController];
- #endif
- }
-}
-
-- (void)setControls:(BOOL)controls
-{
- if( _controls != controls || (!_playerLayer && !_playerViewController) )
- {
- _controls = controls;
- if( _controls )
- {
- [self removePlayerLayer];
- [self usePlayerViewController];
- }
- else
- {
- [_playerViewController.view removeFromSuperview];
- _playerViewController = nil;
- [self usePlayerLayer];
- }
- }
-}
-
-- (void)setProgressUpdateInterval:(float)progressUpdateInterval
-{
- _progressUpdateInterval = progressUpdateInterval;
-
- if (_timeObserver) {
- [self removePlayerTimeObserver];
- [self addPlayerTimeObserver];
- }
-}
-
-- (void)removePlayerLayer
-{
- [_playerLayer removeFromSuperlayer];
- if (_playerLayerObserverSet) {
- [_playerLayer removeObserver:self forKeyPath:readyForDisplayKeyPath];
- _playerLayerObserverSet = NO;
- }
- _playerLayer = nil;
-}
-
-#pragma mark - RCTVideoPlayerViewControllerDelegate
-
-- (void)videoPlayerViewControllerWillDismiss:(AVPlayerViewController *)playerViewController
-{
- if (_playerViewController == playerViewController && _fullscreenPlayerPresented && self.onVideoFullscreenPlayerWillDismiss)
- {
- self.onVideoFullscreenPlayerWillDismiss(@{@"target": self.reactTag});
- }
-}
-
-- (void)videoPlayerViewControllerDidDismiss:(AVPlayerViewController *)playerViewController
-{
- if (_playerViewController == playerViewController && _fullscreenPlayerPresented)
- {
- _fullscreenPlayerPresented = false;
- _presentingViewController = nil;
- _playerViewController = nil;
- [self applyModifiers];
- if(self.onVideoFullscreenPlayerDidDismiss) {
- self.onVideoFullscreenPlayerDidDismiss(@{@"target": self.reactTag});
- }
- }
-}
-
-- (void)setFilter:(NSString *)filterName {
- _filterName = filterName;
-
- if (!_filterEnabled) {
- return;
- } else if ([[_source objectForKey:@"uri"] rangeOfString:@"m3u8"].location != NSNotFound) {
- return; // filters don't work for HLS... return
- } else if (!_playerItem.asset) {
- return;
- }
-
- CIFilter *filter = [CIFilter filterWithName:filterName];
- _playerItem.videoComposition = [AVVideoComposition
- videoCompositionWithAsset:_playerItem.asset
- applyingCIFiltersWithHandler:^(AVAsynchronousCIImageFilteringRequest *_Nonnull request) {
- if (filter == nil) {
- [request finishWithImage:request.sourceImage context:nil];
- } else {
- CIImage *image = request.sourceImage.imageByClampingToExtent;
- [filter setValue:image forKey:kCIInputImageKey];
- CIImage *output = [filter.outputImage imageByCroppingToRect:request.sourceImage.extent];
- [request finishWithImage:output context:nil];
- }
- }];
-}
-
-- (void)setFilterEnabled:(BOOL)filterEnabled {
- _filterEnabled = filterEnabled;
-}
-
-#pragma mark - React View Management
-
-- (void)insertReactSubview:(UIView *)view atIndex:(NSInteger)atIndex
-{
- // We are early in the game and somebody wants to set a subview.
- // That can only be in the context of playerViewController.
- if( !_controls && !_playerLayer && !_playerViewController )
- {
- [self setControls:true];
- }
-
- if( _controls )
- {
- view.frame = self.bounds;
- [_playerViewController.contentOverlayView insertSubview:view atIndex:atIndex];
- }
- else
- {
- RCTLogError(@"video cannot have any subviews");
- }
- return;
-}
-
-- (void)removeReactSubview:(UIView *)subview
-{
- if( _controls )
- {
- [subview removeFromSuperview];
- }
- else
- {
- RCTLogError(@"video cannot have any subviews");
- }
- return;
-}
-
-- (void)layoutSubviews
-{
- [super layoutSubviews];
- if( _controls )
- {
- _playerViewController.view.frame = self.bounds;
-
- // also adjust all subviews of contentOverlayView
- for (UIView* subview in _playerViewController.contentOverlayView.subviews) {
- subview.frame = self.bounds;
- }
- }
- else
- {
- [CATransaction begin];
- [CATransaction setAnimationDuration:0];
- _playerLayer.frame = self.bounds;
- [CATransaction commit];
- }
-}
-
-#pragma mark - Lifecycle
-
-- (void)removeFromSuperview
-{
- [_player pause];
- if (_playbackRateObserverRegistered) {
- [_player removeObserver:self forKeyPath:playbackRate context:nil];
- _playbackRateObserverRegistered = NO;
- }
- if (_isExternalPlaybackActiveObserverRegistered) {
- [_player removeObserver:self forKeyPath:externalPlaybackActive context:nil];
- _isExternalPlaybackActiveObserverRegistered = NO;
- }
- _player = nil;
-
- [self removePlayerLayer];
-
- [_playerViewController.contentOverlayView removeObserver:self forKeyPath:@"frame"];
- [_playerViewController removeObserver:self forKeyPath:readyForDisplayKeyPath];
- [_playerViewController.view removeFromSuperview];
- _playerViewController.rctDelegate = nil;
- _playerViewController.player = nil;
- _playerViewController = nil;
-
- [self removePlayerTimeObserver];
- [self removePlayerItemObservers];
-
- _eventDispatcher = nil;
- [[NSNotificationCenter defaultCenter] removeObserver:self];
-
- [super removeFromSuperview];
-}
-
-#pragma mark - Export
-
-- (void)save:(NSDictionary *)options resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {
-
- AVAsset *asset = _playerItem.asset;
-
- if (asset != nil) {
-
- AVAssetExportSession *exportSession = [AVAssetExportSession
- exportSessionWithAsset:asset presetName:AVAssetExportPresetHighestQuality];
-
- if (exportSession != nil) {
- NSString *path = nil;
- NSArray *array = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
- path = [self generatePathInDirectory:[[self cacheDirectoryPath] stringByAppendingPathComponent:@"Videos"]
- withExtension:@".mp4"];
- NSURL *url = [NSURL fileURLWithPath:path];
- exportSession.outputFileType = AVFileTypeMPEG4;
- exportSession.outputURL = url;
- exportSession.videoComposition = _playerItem.videoComposition;
- exportSession.shouldOptimizeForNetworkUse = true;
- [exportSession exportAsynchronouslyWithCompletionHandler:^{
-
- switch ([exportSession status]) {
- case AVAssetExportSessionStatusFailed:
- reject(@"ERROR_COULD_NOT_EXPORT_VIDEO", @"Could not export video", exportSession.error);
- break;
- case AVAssetExportSessionStatusCancelled:
- reject(@"ERROR_EXPORT_SESSION_CANCELLED", @"Export session was cancelled", exportSession.error);
- break;
- default:
- resolve(@{@"uri": url.absoluteString});
- break;
- }
-
- }];
-
- } else {
-
- reject(@"ERROR_COULD_NOT_CREATE_EXPORT_SESSION", @"Could not create export session", nil);
-
- }
-
- } else {
-
- reject(@"ERROR_ASSET_NIL", @"Asset is nil", nil);
-
- }
-}
-
-- (BOOL)ensureDirExistsWithPath:(NSString *)path {
- BOOL isDir = NO;
- NSError *error;
- BOOL exists = [[NSFileManager defaultManager] fileExistsAtPath:path isDirectory:&isDir];
- if (!(exists && isDir)) {
- [[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:&error];
- if (error) {
- return NO;
- }
- }
- return YES;
-}
-
-- (NSString *)generatePathInDirectory:(NSString *)directory withExtension:(NSString *)extension {
- NSString *fileName = [[[NSUUID UUID] UUIDString] stringByAppendingString:extension];
- [self ensureDirExistsWithPath:directory];
- return [directory stringByAppendingPathComponent:fileName];
-}
-
-- (NSString *)cacheDirectoryPath {
- NSArray *array = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
- return array[0];
-}
-
-#pragma mark - Picture in Picture
-
-#if TARGET_OS_IOS
-- (void)pictureInPictureControllerDidStopPictureInPicture:(AVPictureInPictureController *)pictureInPictureController {
- if (self.onPictureInPictureStatusChanged) {
- self.onPictureInPictureStatusChanged(@{
- @"isActive": [NSNumber numberWithBool:false]
- });
- }
-}
-
-- (void)pictureInPictureControllerDidStartPictureInPicture:(AVPictureInPictureController *)pictureInPictureController {
- if (self.onPictureInPictureStatusChanged) {
- self.onPictureInPictureStatusChanged(@{
- @"isActive": [NSNumber numberWithBool:true]
- });
- }
-}
-
-- (void)pictureInPictureControllerWillStopPictureInPicture:(AVPictureInPictureController *)pictureInPictureController {
-
-}
-
-- (void)pictureInPictureControllerWillStartPictureInPicture:(AVPictureInPictureController *)pictureInPictureController {
-
-}
-
-- (void)pictureInPictureController:(AVPictureInPictureController *)pictureInPictureController failedToStartPictureInPictureWithError:(NSError *)error {
-
-}
-
-- (void)pictureInPictureController:(AVPictureInPictureController *)pictureInPictureController restoreUserInterfaceForPictureInPictureStopWithCompletionHandler:(void (^)(BOOL))completionHandler {
- NSAssert(_restoreUserInterfaceForPIPStopCompletionHandler == NULL, @"restoreUserInterfaceForPIPStopCompletionHandler was not called after picture in picture was exited.");
- if (self.onRestoreUserInterfaceForPictureInPictureStop) {
- self.onRestoreUserInterfaceForPictureInPictureStop(@{});
- }
- _restoreUserInterfaceForPIPStopCompletionHandler = completionHandler;
-}
-#endif
-
-@end
diff --git a/ios/Video/RCTVideo.swift b/ios/Video/RCTVideo.swift
new file mode 100644
index 00000000..2b4a20de
--- /dev/null
+++ b/ios/Video/RCTVideo.swift
@@ -0,0 +1,1083 @@
+import AVFoundation
+import AVKit
+import Foundation
+import React
+import Promises
+
+class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverHandler {
+
+ private var _player:AVPlayer?
+ private var _playerItem:AVPlayerItem?
+ private var _source:VideoSource?
+ private var _playerBufferEmpty:Bool = true
+ private var _playerLayer:AVPlayerLayer?
+
+ private var _playerViewController:RCTVideoPlayerViewController?
+ private var _videoURL:NSURL?
+
+ /* DRM */
+ private var _drm:DRMParams?
+
+ private var _localSourceEncryptionKeyScheme:String?
+
+ /* Required to publish events */
+ private var _eventDispatcher:RCTEventDispatcher?
+ private var _videoLoadStarted:Bool = false
+
+ private var _pendingSeek:Bool = false
+ private var _pendingSeekTime:Float = 0.0
+ private var _lastSeekTime:Float = 0.0
+
+ /* For sending videoProgress events */
+ private var _controls:Bool = false
+
+ /* Keep track of any modifiers, need to be applied after each play */
+ private var _volume:Float = 1.0
+ private var _rate:Float = 1.0
+ private var _maxBitRate:Float?
+
+ private var _automaticallyWaitsToMinimizeStalling:Bool = true
+ private var _muted:Bool = false
+ private var _paused:Bool = false
+ private var _repeat:Bool = false
+ private var _allowsExternalPlayback:Bool = true
+ private var _textTracks:[TextTrack]?
+ private var _selectedTextTrackCriteria:SelectedTrackCriteria?
+ private var _selectedAudioTrackCriteria:SelectedTrackCriteria?
+ private var _playbackStalled:Bool = false
+ private var _playInBackground:Bool = false
+ private var _preventsDisplaySleepDuringVideoPlayback:Bool = true
+ private var _preferredForwardBufferDuration:Float = 0.0
+ private var _playWhenInactive:Bool = false
+ private var _ignoreSilentSwitch:String! = "inherit" // inherit, ignore, obey
+ private var _mixWithOthers:String! = "inherit" // inherit, mix, duck
+ private var _resizeMode:String! = "AVLayerVideoGravityResizeAspectFill"
+ private var _fullscreen:Bool = false
+ private var _fullscreenAutorotate:Bool = true
+ private var _fullscreenOrientation:String! = "all"
+ private var _fullscreenPlayerPresented:Bool = false
+ private var _filterName:String!
+ private var _filterEnabled:Bool = false
+ private var _presentingViewController:UIViewController?
+
+ private var _resouceLoaderDelegate: RCTResourceLoaderDelegate?
+ private var _playerObserver: RCTPlayerObserver = RCTPlayerObserver()
+
+#if canImport(RCTVideoCache)
+ private let _videoCache:RCTVideoCachingHandler = RCTVideoCachingHandler()
+#endif
+
+#if TARGET_OS_IOS
+ private let _pip:RCTPictureInPicture = RCTPictureInPicture(self.onPictureInPictureStatusChanged, self.onRestoreUserInterfaceForPictureInPictureStop)
+#endif
+
+ // Events
+ @objc var onVideoLoadStart: RCTDirectEventBlock?
+ @objc var onVideoLoad: RCTDirectEventBlock?
+ @objc var onVideoBuffer: RCTDirectEventBlock?
+ @objc var onVideoError: RCTDirectEventBlock?
+ @objc var onVideoProgress: RCTDirectEventBlock?
+ @objc var onBandwidthUpdate: RCTDirectEventBlock?
+ @objc var onVideoSeek: RCTDirectEventBlock?
+ @objc var onVideoEnd: RCTDirectEventBlock?
+ @objc var onTimedMetadata: RCTDirectEventBlock?
+ @objc var onVideoAudioBecomingNoisy: RCTDirectEventBlock?
+ @objc var onVideoFullscreenPlayerWillPresent: RCTDirectEventBlock?
+ @objc var onVideoFullscreenPlayerDidPresent: RCTDirectEventBlock?
+ @objc var onVideoFullscreenPlayerWillDismiss: RCTDirectEventBlock?
+ @objc var onVideoFullscreenPlayerDidDismiss: RCTDirectEventBlock?
+ @objc var onReadyForDisplay: RCTDirectEventBlock?
+ @objc var onPlaybackStalled: RCTDirectEventBlock?
+ @objc var onPlaybackResume: RCTDirectEventBlock?
+ @objc var onPlaybackRateChange: RCTDirectEventBlock?
+ @objc var onVideoExternalPlaybackChange: RCTDirectEventBlock?
+ @objc var onPictureInPictureStatusChanged: RCTDirectEventBlock?
+ @objc var onRestoreUserInterfaceForPictureInPictureStop: RCTDirectEventBlock?
+ @objc var onGetLicense: RCTDirectEventBlock?
+
+ init(eventDispatcher:RCTEventDispatcher!) {
+ super.init(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
+
+ _eventDispatcher = eventDispatcher
+
+ NotificationCenter.default.addObserver(
+ self,
+ selector: #selector(applicationWillResignActive(notification:)),
+ name: UIApplication.willResignActiveNotification,
+ object: nil
+ )
+
+ NotificationCenter.default.addObserver(
+ self,
+ selector: #selector(applicationDidEnterBackground(notification:)),
+ name: UIApplication.didEnterBackgroundNotification,
+ object: nil
+ )
+
+ NotificationCenter.default.addObserver(
+ self,
+ selector: #selector(applicationWillEnterForeground(notification:)),
+ name: UIApplication.willEnterForegroundNotification,
+ object: nil
+ )
+
+ NotificationCenter.default.addObserver(
+ self,
+ selector: #selector(audioRouteChanged(notification:)),
+ name: AVAudioSession.routeChangeNotification,
+ object: nil
+ )
+ _playerObserver._handlers = self
+#if canImport(RCTVideoCache)
+ _videoCache.playerItemPrepareText = playerItemPrepareText
+#endif
+ }
+
+ required init?(coder aDecoder: NSCoder) {
+ super.init(coder: aDecoder)
+ }
+
+ deinit {
+ NotificationCenter.default.removeObserver(self)
+ self.removePlayerLayer()
+ _playerObserver.clearPlayer()
+ }
+
+ // MARK: - App lifecycle handlers
+
+ @objc func applicationWillResignActive(notification:NSNotification!) {
+ if _playInBackground || _playWhenInactive || _paused {return}
+
+ _player?.pause()
+ _player?.rate = 0.0
+ }
+
+ @objc func applicationDidEnterBackground(notification:NSNotification!) {
+ if _playInBackground {
+ // Needed to play sound in background. See https://developer.apple.com/library/ios/qa/qa1668/_index.html
+ _playerLayer?.player = nil
+ _playerViewController?.player = nil
+ }
+ }
+
+ @objc func applicationWillEnterForeground(notification:NSNotification!) {
+ self.applyModifiers()
+ if _playInBackground {
+ _playerLayer?.player = _player
+ _playerViewController?.player = _player
+ }
+ }
+
+ // MARK: - Audio events
+
+ @objc func audioRouteChanged(notification:NSNotification!) {
+ if let userInfo = notification.userInfo {
+ let reason:AVAudioSession.RouteChangeReason! = userInfo[AVAudioSessionRouteChangeReasonKey] as? AVAudioSession.RouteChangeReason
+ // let previousRoute:NSNumber! = userInfo[AVAudioSessionRouteChangePreviousRouteKey] as? NSNumber
+ if reason == .oldDeviceUnavailable, let onVideoAudioBecomingNoisy = onVideoAudioBecomingNoisy {
+ onVideoAudioBecomingNoisy(["target": reactTag as Any])
+ }
+ }
+ }
+
+ // MARK: - Progress
+
+ func sendProgressUpdate() {
+ if let video = _player?.currentItem,
+ video == nil || video.status != AVPlayerItem.Status.readyToPlay {
+ return
+ }
+
+ let playerDuration:CMTime = RCTVideoUtils.playerItemDuration(_player)
+ if CMTIME_IS_INVALID(playerDuration) {
+ return
+ }
+
+ let currentTime = _player?.currentTime()
+ let currentPlaybackTime = _player?.currentItem?.currentDate()
+ let duration = CMTimeGetSeconds(playerDuration)
+ let currentTimeSecs = CMTimeGetSeconds(currentTime ?? .zero)
+
+ NotificationCenter.default.post(name: NSNotification.Name("RCTVideo_progress"), object: nil, userInfo: [
+ "progress": NSNumber(value: currentTimeSecs / duration)
+ ])
+
+ if currentTimeSecs >= 0 {
+ onVideoProgress?([
+ "currentTime": NSNumber(value: Float(currentTimeSecs)),
+ "playableDuration": RCTVideoUtils.calculatePlayableDuration(_player),
+ "atValue": NSNumber(value: currentTime?.value ?? .zero),
+ "currentPlaybackTime": NSNumber(value: NSNumber(value: floor(currentPlaybackTime?.timeIntervalSince1970 ?? 0 * 1000)).int64Value),
+ "target": reactTag,
+ "seekableDuration": RCTVideoUtils.calculateSeekableDuration(_player)
+ ])
+ }
+ }
+
+ // MARK: - Player and source
+
+ @objc
+ func setSrc(_ source:NSDictionary!) {
+ _source = VideoSource(source)
+ if (_source?.uri == nil || _source?.uri == "") {
+ DispatchQueue.global(qos: .default).async {
+ self._player?.replaceCurrentItem(with: nil)
+ }
+ return;
+ }
+ removePlayerLayer()
+ _playerObserver.player = nil
+ _playerObserver.playerItem = nil
+
+ // perform on next run loop, otherwise other passed react-props may not be set
+ RCTVideoUtils.delay()
+ .then{ [weak self] in
+ guard let self = self else {throw NSError(domain: "", code: 0, userInfo: nil)}
+ guard let source = self._source else {
+ DebugLog("The source not exist")
+ throw NSError(domain: "", code: 0, userInfo: nil)
+ }
+ if let uri = source.uri, uri.starts(with: "ph://") {
+ return Promise {
+ RCTVideoUtils.preparePHAsset(uri: uri).then { asset in
+ return self.playerItemPrepareText(asset:asset, assetOptions:nil)
+ }
+ }
+ }
+ guard let assetResult = RCTVideoUtils.prepareAsset(source: source),
+ let asset = assetResult.asset,
+ let assetOptions = assetResult.assetOptions else {
+ DebugLog("Could not find video URL in source '\(self._source)'")
+ throw NSError(domain: "", code: 0, userInfo: nil)
+ }
+
+#if canImport(RCTVideoCache)
+ if self._videoCache.shouldCache(source:source, textTracks:self._textTracks) {
+ return self._videoCache.playerItemForSourceUsingCache(uri: source.uri, assetOptions:assetOptions)
+ }
+#endif
+
+ if self._drm != nil || self._localSourceEncryptionKeyScheme != nil {
+ self._resouceLoaderDelegate = RCTResourceLoaderDelegate(
+ asset: asset,
+ drm: self._drm,
+ localSourceEncryptionKeyScheme: self._localSourceEncryptionKeyScheme,
+ onVideoError: self.onVideoError,
+ onGetLicense: self.onGetLicense,
+ reactTag: self.reactTag
+ )
+ }
+ return Promise{self.playerItemPrepareText(asset: asset, assetOptions:assetOptions)}
+ }.then{[weak self] (playerItem:AVPlayerItem!) in
+ guard let self = self else {throw NSError(domain: "", code: 0, userInfo: nil)}
+
+ self._player?.pause()
+ self._playerItem = playerItem
+ self._playerObserver.playerItem = self._playerItem
+ self.setPreferredForwardBufferDuration(self._preferredForwardBufferDuration)
+ self.setFilter(self._filterName)
+ if let maxBitRate = self._maxBitRate {
+ self._playerItem?.preferredPeakBitRate = Double(maxBitRate)
+ }
+
+ self._player = self._player ?? AVPlayer()
+ DispatchQueue.global(qos: .default).async {
+ self._player?.replaceCurrentItem(with: playerItem)
+ }
+ self._playerObserver.player = self._player
+ self.applyModifiers()
+ self._player?.actionAtItemEnd = .none
+
+ if #available(iOS 10.0, *) {
+ self.setAutomaticallyWaitsToMinimizeStalling(self._automaticallyWaitsToMinimizeStalling)
+ }
+
+ //Perform on next run loop, otherwise onVideoLoadStart is nil
+ self.onVideoLoadStart?([
+ "src": [
+ "uri": self._source?.uri ?? NSNull(),
+ "type": self._source?.type ?? NSNull(),
+ "isNetwork": NSNumber(value: self._source?.isNetwork ?? false)
+ ],
+ "drm": self._drm?.json ?? NSNull(),
+ "target": self.reactTag
+ ])
+ }.catch{_ in }
+ _videoLoadStarted = true
+ }
+
+ @objc
+ func setDrm(_ drm:NSDictionary) {
+ _drm = DRMParams(drm)
+ }
+
+ @objc
+ func setLocalSourceEncryptionKeyScheme(_ keyScheme:String) {
+ _localSourceEncryptionKeyScheme = keyScheme
+ }
+
+ func playerItemPrepareText(asset:AVAsset!, assetOptions:NSDictionary?) -> AVPlayerItem {
+ if (_textTracks == nil) || _textTracks?.count==0 {
+ return AVPlayerItem(asset: asset)
+ }
+
+ // AVPlayer can't airplay AVMutableCompositions
+ _allowsExternalPlayback = false
+ let mixComposition = RCTVideoUtils.generateMixComposition(asset)
+ let validTextTracks = RCTVideoUtils.getValidTextTracks(
+ asset:asset,
+ assetOptions:assetOptions,
+ mixComposition:mixComposition,
+ textTracks:_textTracks)
+ if validTextTracks.count != _textTracks?.count {
+ setTextTracks(validTextTracks)
+ }
+
+ return AVPlayerItem(asset: mixComposition)
+ }
+
+ // MARK: - Prop setters
+
+ @objc
+ func setResizeMode(_ mode: String?) {
+ if _controls {
+ _playerViewController?.videoGravity = AVLayerVideoGravity(rawValue: mode ?? "")
+ } else {
+ _playerLayer?.videoGravity = AVLayerVideoGravity(rawValue: mode ?? "")
+ }
+ _resizeMode = mode
+ }
+
+ @objc
+ func setPlayInBackground(_ playInBackground:Bool) {
+ _playInBackground = playInBackground
+ }
+
+ @objc
+ func setPreventsDisplaySleepDuringVideoPlayback(_ preventsDisplaySleepDuringVideoPlayback:Bool) {
+ _preventsDisplaySleepDuringVideoPlayback = preventsDisplaySleepDuringVideoPlayback
+ self.applyModifiers()
+ }
+
+ @objc
+ func setAllowsExternalPlayback(_ allowsExternalPlayback:Bool) {
+ _allowsExternalPlayback = allowsExternalPlayback
+ _player?.allowsExternalPlayback = _allowsExternalPlayback
+ }
+
+ @objc
+ func setPlayWhenInactive(_ playWhenInactive:Bool) {
+ _playWhenInactive = playWhenInactive
+ }
+
+ @objc
+ func setPictureInPicture(_ pictureInPicture:Bool) {
+#if TARGET_OS_IOS
+ _pip.setPictureInPicture(pictureInPicture)
+#endif
+ }
+
+ @objc
+ func setRestoreUserInterfaceForPIPStopCompletionHandler(_ restore:Bool) {
+#if TARGET_OS_IOS
+ _pip.setRestoreUserInterfaceForPIPStopCompletionHandler(restore)
+#endif
+ }
+
+ @objc
+ func setIgnoreSilentSwitch(_ ignoreSilentSwitch:String?) {
+ _ignoreSilentSwitch = ignoreSilentSwitch
+ RCTPlayerOperations.configureAudio(ignoreSilentSwitch:_ignoreSilentSwitch, mixWithOthers:_mixWithOthers)
+ applyModifiers()
+ }
+
+ @objc
+ func setMixWithOthers(_ mixWithOthers:String?) {
+ _mixWithOthers = mixWithOthers
+ applyModifiers()
+ }
+
+ @objc
+ func setPaused(_ paused:Bool) {
+ if paused {
+ _player?.pause()
+ _player?.rate = 0.0
+ } else {
+ RCTPlayerOperations.configureAudio(ignoreSilentSwitch:_ignoreSilentSwitch, mixWithOthers:_mixWithOthers)
+
+ if #available(iOS 10.0, *), !_automaticallyWaitsToMinimizeStalling {
+ _player?.playImmediately(atRate: _rate)
+ } else {
+ _player?.play()
+ _player?.rate = _rate
+ }
+ _player?.rate = _rate
+ }
+
+ _paused = paused
+ }
+
+ @objc
+ func setCurrentTime(_ currentTime:Float) {
+ let info:NSDictionary = [
+ "time": NSNumber(value: currentTime),
+ "tolerance": NSNumber(value: 100)
+ ]
+ setSeek(info)
+ }
+
+ @objc
+ func setSeek(_ info:NSDictionary!) {
+ let seekTime:NSNumber! = info["time"] as! NSNumber
+ let seekTolerance:NSNumber! = info["tolerance"] as! NSNumber
+ let item:AVPlayerItem? = _player?.currentItem
+ guard item != nil, let player = _player, let item = item, item.status == AVPlayerItem.Status.readyToPlay else {
+ _pendingSeek = true
+ _pendingSeekTime = seekTime.floatValue
+ return
+ }
+ let wasPaused = _paused
+
+ RCTPlayerOperations.seek(
+ player:player,
+ playerItem:item,
+ paused:wasPaused,
+ seekTime:seekTime.floatValue,
+ seekTolerance:seekTolerance.floatValue)
+ .then{ [weak self] (finished:Bool) in
+ guard let self = self else { return }
+
+ self._playerObserver.addTimeObserverIfNotSet()
+ if !wasPaused {
+ self.setPaused(false)
+ }
+ self.onVideoSeek?(["currentTime": NSNumber(value: Float(CMTimeGetSeconds(item.currentTime()))),
+ "seekTime": seekTime,
+ "target": self.reactTag])
+ }.catch{_ in }
+
+ _pendingSeek = false
+ }
+
+ @objc
+ func setRate(_ rate:Float) {
+ _rate = rate
+ applyModifiers()
+ }
+
+ @objc
+ func setMuted(_ muted:Bool) {
+ _muted = muted
+ applyModifiers()
+ }
+
+ @objc
+ func setVolume(_ volume:Float) {
+ _volume = volume
+ applyModifiers()
+ }
+
+ @objc
+ func setMaxBitRate(_ maxBitRate:Float) {
+ _maxBitRate = maxBitRate
+ _playerItem?.preferredPeakBitRate = Double(maxBitRate)
+ }
+
+ @objc
+ func setPreferredForwardBufferDuration(_ preferredForwardBufferDuration:Float) {
+ _preferredForwardBufferDuration = preferredForwardBufferDuration
+ if #available(iOS 10.0, *) {
+ _playerItem?.preferredForwardBufferDuration = TimeInterval(preferredForwardBufferDuration)
+ } else {
+ // Fallback on earlier versions
+ }
+ }
+
+ @objc
+ func setAutomaticallyWaitsToMinimizeStalling(_ waits:Bool) {
+ _automaticallyWaitsToMinimizeStalling = waits
+ if #available(iOS 10.0, *) {
+ _player?.automaticallyWaitsToMinimizeStalling = waits
+ } else {
+ // Fallback on earlier versions
+ }
+ }
+
+
+ func applyModifiers() {
+ if _muted {
+ if !_controls {
+ _player?.volume = 0
+ }
+ _player?.isMuted = true
+ } else {
+ _player?.volume = _volume
+ _player?.isMuted = false
+ }
+
+ if #available(iOS 12.0, *) {
+ _player?.preventsDisplaySleepDuringVideoPlayback = _preventsDisplaySleepDuringVideoPlayback
+ } else {
+ // Fallback on earlier versions
+ }
+
+ if let _maxBitRate = _maxBitRate {
+ setMaxBitRate(_maxBitRate)
+ }
+
+ setSelectedAudioTrack(_selectedAudioTrackCriteria)
+ setSelectedTextTrack(_selectedTextTrackCriteria)
+ setResizeMode(_resizeMode)
+ setRepeat(_repeat)
+ setControls(_controls)
+ setPaused(_paused)
+ setAllowsExternalPlayback(_allowsExternalPlayback)
+ }
+
+ @objc
+ func setRepeat(_ `repeat`: Bool) {
+ _repeat = `repeat`
+ }
+
+
+
+ @objc
+ func setSelectedAudioTrack(_ selectedAudioTrack:NSDictionary?) {
+ setSelectedAudioTrack(SelectedTrackCriteria(selectedAudioTrack))
+ }
+
+ func setSelectedAudioTrack(_ selectedAudioTrack:SelectedTrackCriteria?) {
+ _selectedAudioTrackCriteria = selectedAudioTrack
+ RCTPlayerOperations.setMediaSelectionTrackForCharacteristic(player:_player, characteristic: AVMediaCharacteristic.audible,
+ criteria:_selectedAudioTrackCriteria)
+ }
+
+ @objc
+ func setSelectedTextTrack(_ selectedTextTrack:NSDictionary?) {
+ setSelectedTextTrack(SelectedTrackCriteria(selectedTextTrack))
+ }
+
+ func setSelectedTextTrack(_ selectedTextTrack:SelectedTrackCriteria?) {
+ _selectedTextTrackCriteria = selectedTextTrack
+ if (_textTracks != nil) { // sideloaded text tracks
+ RCTPlayerOperations.setSideloadedText(player:_player, textTracks:_textTracks, criteria:_selectedTextTrackCriteria)
+ } else { // text tracks included in the HLS playlist
+ RCTPlayerOperations.setMediaSelectionTrackForCharacteristic(player:_player, characteristic: AVMediaCharacteristic.legible,
+ criteria:_selectedTextTrackCriteria)
+ }
+ }
+
+ @objc
+ func setTextTracks(_ textTracks:[NSDictionary]?) {
+ setTextTracks(textTracks?.map { TextTrack($0) })
+ }
+
+ func setTextTracks(_ textTracks:[TextTrack]?) {
+ _textTracks = textTracks
+
+ // in case textTracks was set after selectedTextTrack
+ if (_selectedTextTrackCriteria != nil) {setSelectedTextTrack(_selectedTextTrackCriteria)}
+ }
+
+ @objc
+ func setFullscreen(_ fullscreen:Bool) {
+ if fullscreen && !_fullscreenPlayerPresented && _player != nil {
+ // Ensure player view controller is not null
+ if _playerViewController == nil {
+ self.usePlayerViewController()
+ }
+
+ // Set presentation style to fullscreen
+ _playerViewController?.modalPresentationStyle = .fullScreen
+
+ // Find the nearest view controller
+ var viewController:UIViewController! = self.firstAvailableUIViewController()
+ if (viewController == nil) {
+ let keyWindow:UIWindow! = UIApplication.shared.keyWindow
+ viewController = keyWindow.rootViewController
+ if viewController.children.count > 0
+ {
+ viewController = viewController.children.last
+ }
+ }
+ if viewController != nil {
+ _presentingViewController = viewController
+
+ self.onVideoFullscreenPlayerWillPresent?(["target": reactTag as Any])
+
+ viewController.present(viewController, animated:true, completion:{
+ self._playerViewController?.showsPlaybackControls = true
+ self._fullscreenPlayerPresented = fullscreen
+ self._playerViewController?.autorotate = self._fullscreenAutorotate
+
+ self.onVideoFullscreenPlayerDidPresent?(["target": self.reactTag])
+
+ })
+ }
+ } else if !fullscreen && _fullscreenPlayerPresented, let _playerViewController = _playerViewController {
+ self.videoPlayerViewControllerWillDismiss(playerViewController: _playerViewController)
+ _presentingViewController?.dismiss(animated: true, completion:{
+ self.videoPlayerViewControllerDidDismiss(playerViewController: _playerViewController)
+ })
+ }
+ }
+
+ @objc
+ func setFullscreenAutorotate(_ autorotate:Bool) {
+ _fullscreenAutorotate = autorotate
+ if _fullscreenPlayerPresented {
+ _playerViewController?.autorotate = autorotate
+ }
+ }
+
+ @objc
+ func setFullscreenOrientation(_ orientation:String?) {
+ _fullscreenOrientation = orientation
+ if _fullscreenPlayerPresented {
+ _playerViewController?.preferredOrientation = orientation
+ }
+ }
+
+ func usePlayerViewController() {
+ guard let _player = _player, let _playerItem = _playerItem else { return }
+
+ if _playerViewController == nil {
+ _playerViewController = createPlayerViewController(player:_player, withPlayerItem:_playerItem)
+ }
+ // to prevent video from being animated when resizeMode is 'cover'
+ // resize mode must be set before subview is added
+ setResizeMode(_resizeMode)
+
+ guard let _playerViewController = _playerViewController else { return }
+
+ if _controls {
+ let viewController:UIViewController! = self.reactViewController()
+ viewController.addChild(_playerViewController)
+ self.addSubview(_playerViewController.view)
+ }
+
+ _playerObserver.playerViewController = _playerViewController
+ }
+
+ func createPlayerViewController(player:AVPlayer, withPlayerItem playerItem:AVPlayerItem) -> RCTVideoPlayerViewController {
+ let viewController = RCTVideoPlayerViewController()
+ viewController.showsPlaybackControls = true
+ viewController.rctDelegate = self
+ viewController.preferredOrientation = _fullscreenOrientation
+
+ viewController.view.frame = self.bounds
+ viewController.player = player
+ return viewController
+ }
+
+ func usePlayerLayer() {
+ if let _player = _player {
+ _playerLayer = AVPlayerLayer(player: _player)
+ _playerLayer?.frame = self.bounds
+ _playerLayer?.needsDisplayOnBoundsChange = true
+
+ // to prevent video from being animated when resizeMode is 'cover'
+ // resize mode must be set before layer is added
+ setResizeMode(_resizeMode)
+ _playerObserver.playerLayer = _playerLayer
+
+ if let _playerLayer = _playerLayer {
+ self.layer.addSublayer(_playerLayer)
+ }
+ self.layer.needsDisplayOnBoundsChange = true
+#if TARGET_OS_IOS
+ _pip.setupPipController(_playerLayer)
+#endif
+ }
+ }
+
+ @objc
+ func setControls(_ controls:Bool) {
+ if _controls != controls || ((_playerLayer == nil) && (_playerViewController == nil))
+ {
+ _controls = controls
+ if _controls
+ {
+ self.removePlayerLayer()
+ self.usePlayerViewController()
+ }
+ else
+ {
+ _playerViewController?.view.removeFromSuperview()
+ _playerViewController?.removeFromParent()
+ _playerViewController = nil
+ _playerObserver.playerViewController = nil
+ self.usePlayerLayer()
+ }
+ }
+ }
+
+ @objc
+ func setProgressUpdateInterval(_ progressUpdateInterval:Float) {
+ _playerObserver.replaceTimeObserverIfSet(Float64(progressUpdateInterval))
+ }
+
+ func removePlayerLayer() {
+ _resouceLoaderDelegate = nil
+ _playerLayer?.removeFromSuperlayer()
+ _playerLayer = nil
+ _playerObserver.playerLayer = nil
+ }
+
+ // MARK: - RCTVideoPlayerViewControllerDelegate
+
+ func videoPlayerViewControllerWillDismiss(playerViewController:AVPlayerViewController) {
+ if _playerViewController == playerViewController && _fullscreenPlayerPresented, let onVideoFullscreenPlayerWillDismiss = onVideoFullscreenPlayerWillDismiss {
+ _playerObserver.removePlayerViewControllerObservers()
+ onVideoFullscreenPlayerWillDismiss(["target": reactTag as Any])
+ }
+ }
+
+
+ func videoPlayerViewControllerDidDismiss(playerViewController:AVPlayerViewController) {
+ if _playerViewController == playerViewController && _fullscreenPlayerPresented {
+ _fullscreenPlayerPresented = false
+ _presentingViewController = nil
+ _playerViewController = nil
+ _playerObserver.playerViewController = nil
+ self.applyModifiers()
+
+ onVideoFullscreenPlayerDidDismiss?(["target": reactTag as Any])
+ }
+ }
+
+ @objc
+ func setFilter(_ filterName:String!) {
+ _filterName = filterName
+
+ if !_filterEnabled {
+ return
+ } else if let uri = _source?.uri, uri.contains("m3u8") {
+ return // filters don't work for HLS... return
+ } else if _playerItem?.asset == nil {
+ return
+ }
+
+ let filter:CIFilter! = CIFilter(name: filterName)
+ if #available(iOS 9.0, *), let _playerItem = _playerItem {
+ self._playerItem?.videoComposition = AVVideoComposition(
+ asset: _playerItem.asset,
+ applyingCIFiltersWithHandler: { (request:AVAsynchronousCIImageFilteringRequest) in
+ if filter == nil {
+ request.finish(with: request.sourceImage, context:nil)
+ } else {
+ let image:CIImage! = request.sourceImage.clampedToExtent()
+ filter.setValue(image, forKey:kCIInputImageKey)
+ let output:CIImage! = filter.outputImage?.cropped(to: request.sourceImage.extent)
+ request.finish(with: output, context:nil)
+ }
+ })
+ } else {
+ // Fallback on earlier versions
+ }
+ }
+
+ @objc
+ func setFilterEnabled(_ filterEnabled:Bool) {
+ _filterEnabled = filterEnabled
+ }
+
+ // MARK: - React View Management
+
+ func insertReactSubview(view:UIView!, atIndex:Int) {
+ // We are early in the game and somebody wants to set a subview.
+ // That can only be in the context of playerViewController.
+ if !_controls && (_playerLayer == nil) && (_playerViewController == nil) {
+ setControls(true)
+ }
+
+ if _controls {
+ view.frame = self.bounds
+ _playerViewController?.contentOverlayView?.insertSubview(view, at:atIndex)
+ } else {
+ RCTLogError("video cannot have any subviews")
+ }
+ return
+ }
+
+ func removeReactSubview(subview:UIView!) {
+ if _controls {
+ subview.removeFromSuperview()
+ } else {
+ RCTLog("video cannot have any subviews")
+ }
+ return
+ }
+
+ override func layoutSubviews() {
+ super.layoutSubviews()
+ if _controls, let _playerViewController = _playerViewController {
+ _playerViewController.view.frame = bounds
+
+ // also adjust all subviews of contentOverlayView
+ for subview in _playerViewController.contentOverlayView?.subviews ?? [] {
+ subview.frame = bounds
+ }
+ } else {
+ CATransaction.begin()
+ CATransaction.setAnimationDuration(0)
+ _playerLayer?.frame = bounds
+ CATransaction.commit()
+ }
+ }
+
+ // MARK: - Lifecycle
+
+ override func removeFromSuperview() {
+ _player?.pause()
+ _player = nil
+ _playerObserver.clearPlayer()
+
+ self.removePlayerLayer()
+
+ if let _playerViewController = _playerViewController {
+ _playerViewController.view.removeFromSuperview()
+ _playerViewController.removeFromParent()
+ _playerViewController.rctDelegate = nil
+ _playerViewController.player = nil
+ self._playerViewController = nil
+ _playerObserver.playerViewController = nil
+ }
+
+ _eventDispatcher = nil
+ NotificationCenter.default.removeObserver(self)
+
+ super.removeFromSuperview()
+ }
+
+ // MARK: - Export
+
+ @objc
+ func save(options:NSDictionary!, resolve: @escaping RCTPromiseResolveBlock, reject:@escaping RCTPromiseRejectBlock) {
+ RCTVideoSave.save(
+ options:options,
+ resolve:resolve,
+ reject:reject,
+ playerItem:_playerItem
+ )
+ }
+
+ func setLicenseResult(_ license:String!) {
+ _resouceLoaderDelegate?.setLicenseResult(license)
+ }
+
+ func setLicenseResultError(_ error:String!) {
+ _resouceLoaderDelegate?.setLicenseResultError(error)
+ }
+
+ // MARK: - RCTPlayerObserverHandler
+
+ func handleTimeUpdate(time:CMTime) {
+ sendProgressUpdate()
+ }
+
+ func handleReadyForDisplay(changeObject: Any, change:NSKeyValueObservedChange) {
+ onReadyForDisplay?([
+ "target": reactTag
+ ])
+ }
+
+ // When timeMetadata is read the event onTimedMetadata is triggered
+ func handleTimeMetadataChange(playerItem:AVPlayerItem, change:NSKeyValueObservedChange<[AVMetadataItem]?>) {
+ guard let newValue = change.newValue, let _items = newValue, _items.count > 0 else {
+ return
+ }
+
+ var metadata: [[String:String?]?] = []
+ for item in _items {
+ let value = item.value as? String
+ let identifier = item.identifier?.rawValue
+
+ if let value = value {
+ metadata.append(["value":value, "identifier":identifier])
+ }
+ }
+
+ onTimedMetadata?([
+ "target": reactTag,
+ "metadata": metadata
+ ])
+ }
+
+ // Handle player item status change.
+ func handlePlayerItemStatusChange(playerItem:AVPlayerItem, change:NSKeyValueObservedChange) {
+ guard let _playerItem = _playerItem else {
+ return
+ }
+
+ if _playerItem.status == .readyToPlay {
+ handleReadyToPlay()
+ } else if _playerItem.status == .failed {
+ handlePlaybackFailed()
+ }
+ }
+
+ func handleReadyToPlay() {
+ guard let _playerItem = _playerItem else { return }
+ var duration:Float = Float(CMTimeGetSeconds(_playerItem.asset.duration))
+
+ if duration.isNaN {
+ duration = 0.0
+ }
+
+ var width: Float? = nil
+ var height: Float? = nil
+ var orientation = "undefined"
+
+ if _playerItem.asset.tracks(withMediaType: AVMediaType.video).count > 0 {
+ let videoTrack = _playerItem.asset.tracks(withMediaType: .video)[0]
+ width = Float(videoTrack.naturalSize.width)
+ height = Float(videoTrack.naturalSize.height)
+ let preferredTransform = videoTrack.preferredTransform
+
+ if (videoTrack.naturalSize.width == preferredTransform.tx
+ && videoTrack.naturalSize.height == preferredTransform.ty)
+ || (preferredTransform.tx == 0 && preferredTransform.ty == 0)
+ {
+ orientation = "landscape"
+ } else {
+ orientation = "portrait"
+ }
+ } else if _playerItem.presentationSize.height != 0.0 {
+ width = Float(_playerItem.presentationSize.width)
+ height = Float(_playerItem.presentationSize.height)
+ orientation = _playerItem.presentationSize.width > _playerItem.presentationSize.height ? "landscape" : "portrait"
+ }
+
+ if _pendingSeek {
+ setCurrentTime(_pendingSeekTime)
+ _pendingSeek = false
+ }
+
+ if _videoLoadStarted {
+ onVideoLoad?(["duration": NSNumber(value: duration),
+ "currentTime": NSNumber(value: Float(CMTimeGetSeconds(_playerItem.currentTime()))),
+ "canPlayReverse": NSNumber(value: _playerItem.canPlayReverse),
+ "canPlayFastForward": NSNumber(value: _playerItem.canPlayFastForward),
+ "canPlaySlowForward": NSNumber(value: _playerItem.canPlaySlowForward),
+ "canPlaySlowReverse": NSNumber(value: _playerItem.canPlaySlowReverse),
+ "canStepBackward": NSNumber(value: _playerItem.canStepBackward),
+ "canStepForward": NSNumber(value: _playerItem.canStepForward),
+ "naturalSize": [
+ "width": width != nil ? NSNumber(value: width!) : "undefinded",
+ "height": width != nil ? NSNumber(value: height!) : "undefinded",
+ "orientation": orientation
+ ],
+ "audioTracks": RCTVideoUtils.getAudioTrackInfo(_player),
+ "textTracks": _textTracks ?? RCTVideoUtils.getTextTrackInfo(_player),
+ "target": reactTag as Any])
+ }
+ _videoLoadStarted = false
+ _playerObserver.attachPlayerEventListeners()
+ applyModifiers()
+ }
+
+ func handlePlaybackFailed() {
+ guard let _playerItem = _playerItem else { return }
+ onVideoError?(
+ [
+ "error": [
+ "code": NSNumber(value: (_playerItem.error! as NSError).code),
+ "localizedDescription": _playerItem.error?.localizedDescription == nil ? "" : _playerItem.error?.localizedDescription,
+ "localizedFailureReason": ((_playerItem.error! as NSError).localizedFailureReason == nil ? "" : (_playerItem.error! as NSError).localizedFailureReason) ?? "",
+ "localizedRecoverySuggestion": ((_playerItem.error! as NSError).localizedRecoverySuggestion == nil ? "" : (_playerItem.error! as NSError).localizedRecoverySuggestion) ?? "",
+ "domain": (_playerItem.error as! NSError).domain
+ ],
+ "target": reactTag
+ ])
+ }
+
+ func handlePlaybackBufferKeyEmpty(playerItem:AVPlayerItem, change:NSKeyValueObservedChange) {
+ _playerBufferEmpty = true
+ onVideoBuffer?(["isBuffering": true, "target": reactTag as Any])
+ }
+
+ // Continue playing (or not if paused) after being paused due to hitting an unbuffered zone.
+ func handlePlaybackLikelyToKeepUp(playerItem:AVPlayerItem, change:NSKeyValueObservedChange) {
+ if (!(_controls || _fullscreenPlayerPresented) || _playerBufferEmpty) && ((_playerItem?.isPlaybackLikelyToKeepUp) != nil) {
+ setPaused(_paused)
+ }
+ _playerBufferEmpty = false
+ onVideoBuffer?(["isBuffering": false, "target": reactTag as Any])
+ }
+
+ func handlePlaybackRateChange(player: AVPlayer, change: NSKeyValueObservedChange) {
+ guard let _player = _player else { return }
+ onPlaybackRateChange?(["playbackRate": NSNumber(value: _player.rate),
+ "target": reactTag as Any])
+ if _playbackStalled && _player.rate > 0 {
+ onPlaybackResume?(["playbackRate": NSNumber(value: _player.rate),
+ "target": reactTag as Any])
+ _playbackStalled = false
+ }
+ }
+
+ func handleExternalPlaybackActiveChange(player: AVPlayer, change: NSKeyValueObservedChange) {
+ guard let _player = _player else { return }
+ onVideoExternalPlaybackChange?(["isExternalPlaybackActive": NSNumber(value: _player.isExternalPlaybackActive),
+ "target": reactTag as Any])
+ }
+
+ func handleViewControllerOverlayViewFrameChange(overlayView:UIView, change:NSKeyValueObservedChange) {
+ let oldRect = change.oldValue
+ let newRect = change.newValue
+ if !oldRect!.equalTo(newRect!) {
+ if newRect!.equalTo(UIScreen.main.bounds) {
+ NSLog("in fullscreen")
+
+ self.reactViewController().view.frame = UIScreen.main.bounds
+ self.reactViewController().view.setNeedsLayout()
+ } else {NSLog("not fullscreen")}
+ }
+ }
+
+ @objc func handleDidFailToFinishPlaying(notification:NSNotification!) {
+ let error:NSError! = notification.userInfo?[AVPlayerItemFailedToPlayToEndTimeErrorKey] as? NSError
+ onVideoError?(
+ [
+ "error": [
+ "code": NSNumber(value: (error as NSError).code),
+ "localizedDescription": error.localizedDescription ?? "",
+ "localizedFailureReason": (error as NSError).localizedFailureReason ?? "",
+ "localizedRecoverySuggestion": (error as NSError).localizedRecoverySuggestion ?? "",
+ "domain": (error as NSError).domain
+ ],
+ "target": reactTag
+ ])
+ }
+
+ @objc func handlePlaybackStalled(notification:NSNotification!) {
+ onPlaybackStalled?(["target": reactTag as Any])
+ _playbackStalled = true
+ }
+
+ @objc func handlePlayerItemDidReachEnd(notification:NSNotification!) {
+ onVideoEnd?(["target": reactTag as Any])
+
+ if _repeat {
+ let item:AVPlayerItem! = notification.object as? AVPlayerItem
+ item.seek(to: CMTime.zero)
+ self.applyModifiers()
+ } else {
+ self.setPaused(true);
+ _playerObserver.removePlayerTimeObserver()
+ }
+ }
+
+ //unused
+ // @objc func handleAVPlayerAccess(notification:NSNotification!) {
+ // let accessLog:AVPlayerItemAccessLog! = (notification.object as! AVPlayerItem).accessLog()
+ // let lastEvent:AVPlayerItemAccessLogEvent! = accessLog.events.last
+ //
+ // /* TODO: get this working
+ // if (self.onBandwidthUpdate) {
+ // self.onBandwidthUpdate(@{@"bitrate": [NSNumber numberWithFloat:lastEvent.observedBitrate]});
+ // }
+ // */
+ // }
+}
diff --git a/ios/Video/RCTVideoManager.h b/ios/Video/RCTVideoManager.h
deleted file mode 100644
index b3bfccb5..00000000
--- a/ios/Video/RCTVideoManager.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#import
-#import
-
-@interface RCTVideoManager : RCTViewManager
-
-@end
diff --git a/ios/Video/RCTVideoManager.m b/ios/Video/RCTVideoManager.m
index 7233646f..9979b440 100644
--- a/ios/Video/RCTVideoManager.m
+++ b/ios/Video/RCTVideoManager.m
@@ -1,24 +1,10 @@
-#import "RCTVideoManager.h"
-#import "RCTVideo.h"
#import
-#import
-#import
+#import "React/RCTViewManager.h"
-@implementation RCTVideoManager
-
-RCT_EXPORT_MODULE();
-
-- (UIView *)view
-{
- return [[RCTVideo alloc] initWithEventDispatcher:self.bridge.eventDispatcher];
-}
-
-- (dispatch_queue_t)methodQueue
-{
- return self.bridge.uiManager.methodQueue;
-}
+@interface RCT_EXTERN_MODULE(RCTVideoManager, RCTViewManager)
RCT_EXPORT_VIEW_PROPERTY(src, NSDictionary);
+RCT_EXPORT_VIEW_PROPERTY(drm, NSDictionary);
RCT_EXPORT_VIEW_PROPERTY(maxBitRate, float);
RCT_EXPORT_VIEW_PROPERTY(resizeMode, NSString);
RCT_EXPORT_VIEW_PROPERTY(repeat, BOOL);
@@ -32,9 +18,12 @@ RCT_EXPORT_VIEW_PROPERTY(muted, BOOL);
RCT_EXPORT_VIEW_PROPERTY(controls, BOOL);
RCT_EXPORT_VIEW_PROPERTY(volume, float);
RCT_EXPORT_VIEW_PROPERTY(playInBackground, BOOL);
+RCT_EXPORT_VIEW_PROPERTY(preventsDisplaySleepDuringVideoPlayback, BOOL);
+RCT_EXPORT_VIEW_PROPERTY(preferredForwardBufferDuration, float);
RCT_EXPORT_VIEW_PROPERTY(playWhenInactive, BOOL);
RCT_EXPORT_VIEW_PROPERTY(pictureInPicture, BOOL);
RCT_EXPORT_VIEW_PROPERTY(ignoreSilentSwitch, NSString);
+RCT_EXPORT_VIEW_PROPERTY(mixWithOthers, NSString);
RCT_EXPORT_VIEW_PROPERTY(rate, float);
RCT_EXPORT_VIEW_PROPERTY(seek, NSDictionary);
RCT_EXPORT_VIEW_PROPERTY(currentTime, float);
@@ -45,6 +34,8 @@ RCT_EXPORT_VIEW_PROPERTY(filter, NSString);
RCT_EXPORT_VIEW_PROPERTY(filterEnabled, BOOL);
RCT_EXPORT_VIEW_PROPERTY(progressUpdateInterval, float);
RCT_EXPORT_VIEW_PROPERTY(restoreUserInterfaceForPIPStopCompletionHandler, BOOL);
+RCT_EXPORT_VIEW_PROPERTY(localSourceEncryptionKeyScheme, NSString);
+
/* Should support: onLoadStart, onLoad, and onError to stay consistent with Image */
RCT_EXPORT_VIEW_PROPERTY(onVideoLoadStart, RCTDirectEventBlock);
RCT_EXPORT_VIEW_PROPERTY(onVideoLoad, RCTDirectEventBlock);
@@ -65,37 +56,19 @@ RCT_EXPORT_VIEW_PROPERTY(onPlaybackStalled, RCTDirectEventBlock);
RCT_EXPORT_VIEW_PROPERTY(onPlaybackResume, RCTDirectEventBlock);
RCT_EXPORT_VIEW_PROPERTY(onPlaybackRateChange, RCTDirectEventBlock);
RCT_EXPORT_VIEW_PROPERTY(onVideoExternalPlaybackChange, RCTDirectEventBlock);
-RCT_REMAP_METHOD(save,
- options:(NSDictionary *)options
- reactTag:(nonnull NSNumber *)reactTag
- resolver:(RCTPromiseResolveBlock)resolve
- rejecter:(RCTPromiseRejectBlock)reject)
-{
- [self.bridge.uiManager prependUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary *viewRegistry) {
- RCTVideo *view = viewRegistry[reactTag];
- if (![view isKindOfClass:[RCTVideo class]]) {
- RCTLogError(@"Invalid view returned from registry, expecting RCTVideo, got: %@", view);
- } else {
- [view save:options resolve:resolve reject:reject];
- }
- }];
-}
+RCT_EXPORT_VIEW_PROPERTY(onGetLicense, RCTDirectEventBlock);
RCT_EXPORT_VIEW_PROPERTY(onPictureInPictureStatusChanged, RCTDirectEventBlock);
RCT_EXPORT_VIEW_PROPERTY(onRestoreUserInterfaceForPictureInPictureStop, RCTDirectEventBlock);
-- (NSDictionary *)constantsToExport
-{
- return @{
- @"ScaleNone": AVLayerVideoGravityResizeAspect,
- @"ScaleToFill": AVLayerVideoGravityResize,
- @"ScaleAspectFit": AVLayerVideoGravityResizeAspect,
- @"ScaleAspectFill": AVLayerVideoGravityResizeAspectFill
- };
-}
+RCT_EXTERN_METHOD(save:(NSDictionary *)options
+ reactTag:(nonnull NSNumber *)reactTag
+ resolver:(RCTPromiseResolveBlock)resolve
+ rejecter:(RCTPromiseRejectBlock)reject)
-+ (BOOL)requiresMainQueueSetup
-{
- return YES;
-}
+RCT_EXTERN_METHOD(setLicenseResult:(NSString *)license
+ reactTag:(nonnull NSNumber *)reactTag)
+
+RCT_EXTERN_METHOD(setLicenseResultError(NSString *)error
+ reactTag:(nonnull NSNumber *)reactTag)
@end
diff --git a/ios/Video/RCTVideoManager.swift b/ios/Video/RCTVideoManager.swift
new file mode 100644
index 00000000..d1c73de8
--- /dev/null
+++ b/ios/Video/RCTVideoManager.swift
@@ -0,0 +1,63 @@
+import AVFoundation
+import React
+
+@objc(RCTVideoManager)
+class RCTVideoManager: RCTViewManager {
+
+ override func view() -> UIView {
+ return RCTVideo(eventDispatcher: bridge.eventDispatcher() as! RCTEventDispatcher)
+ }
+
+ func methodQueue() -> DispatchQueue {
+ return bridge.uiManager.methodQueue
+ }
+
+ @objc(save:reactTag:resolver:rejecter:)
+ func save(options: NSDictionary, reactTag: NSNumber, resolve: @escaping RCTPromiseResolveBlock,reject: @escaping RCTPromiseRejectBlock) -> Void {
+ bridge.uiManager.prependUIBlock({_ , viewRegistry in
+ let view = viewRegistry?[reactTag]
+ if !(view is RCTVideo) {
+ RCTLogError("Invalid view returned from registry, expecting RCTVideo, got: %@", String(describing: view))
+ } else if let view = view as? RCTVideo {
+ view.save(options: options, resolve: resolve, reject: reject)
+ }
+ })
+ }
+
+ @objc(setLicenseResult:reactTag:)
+ func setLicenseResult(license: NSString, reactTag: NSNumber) -> Void {
+ bridge.uiManager.prependUIBlock({_ , viewRegistry in
+ let view = viewRegistry?[reactTag]
+ if !(view is RCTVideo) {
+ RCTLogError("Invalid view returned from registry, expecting RCTVideo, got: %@", String(describing: view))
+ } else if let view = view as? RCTVideo {
+ view.setLicenseResult(license as String)
+ }
+ })
+ }
+
+ @objc(setLicenseResultError:reactTag:)
+ func setLicenseResultError(error: NSString, reactTag: NSNumber) -> Void {
+ bridge.uiManager.prependUIBlock({_ , viewRegistry in
+ let view = viewRegistry?[reactTag]
+ if !(view is RCTVideo) {
+ RCTLogError("Invalid view returned from registry, expecting RCTVideo, got: %@", String(describing: view))
+ } else if let view = view as? RCTVideo {
+ view.setLicenseResultError(error as String)
+ }
+ })
+ }
+
+ override func constantsToExport() -> [AnyHashable : Any]? {
+ return [
+ "ScaleNone": AVLayerVideoGravity.resizeAspect,
+ "ScaleToFill": AVLayerVideoGravity.resize,
+ "ScaleAspectFit": AVLayerVideoGravity.resizeAspect,
+ "ScaleAspectFill": AVLayerVideoGravity.resizeAspectFill
+ ]
+ }
+
+ override class func requiresMainQueueSetup() -> Bool {
+ return true
+ }
+}
diff --git a/ios/Video/RCTVideoPlayerViewController.h b/ios/Video/RCTVideoPlayerViewController.h
deleted file mode 100644
index ed9ebdde..00000000
--- a/ios/Video/RCTVideoPlayerViewController.h
+++ /dev/null
@@ -1,20 +0,0 @@
-//
-// RCTVideoPlayerViewController.h
-// RCTVideo
-//
-// Created by Stanisław Chmiela on 31.03.2016.
-// Copyright © 2016 Facebook. All rights reserved.
-//
-
-#import
-#import "RCTVideo.h"
-#import "RCTVideoPlayerViewControllerDelegate.h"
-
-@interface RCTVideoPlayerViewController : AVPlayerViewController
-@property (nonatomic, weak) id rctDelegate;
-
-// Optional paramters
-@property (nonatomic, weak) NSString* preferredOrientation;
-@property (nonatomic) BOOL autorotate;
-
-@end
diff --git a/ios/Video/RCTVideoPlayerViewController.m b/ios/Video/RCTVideoPlayerViewController.m
deleted file mode 100644
index 548a06ce..00000000
--- a/ios/Video/RCTVideoPlayerViewController.m
+++ /dev/null
@@ -1,43 +0,0 @@
-#import "RCTVideoPlayerViewController.h"
-
-@interface RCTVideoPlayerViewController ()
-
-@end
-
-@implementation RCTVideoPlayerViewController
-
-- (BOOL)shouldAutorotate {
-
- if (self.autorotate || self.preferredOrientation.lowercaseString == nil || [self.preferredOrientation.lowercaseString isEqualToString:@"all"])
- return YES;
-
- return NO;
-}
-
-- (void)viewDidDisappear:(BOOL)animated
-{
- [super viewDidDisappear:animated];
- [_rctDelegate videoPlayerViewControllerWillDismiss:self];
- [_rctDelegate videoPlayerViewControllerDidDismiss:self];
-}
-
-#if !TARGET_OS_TV
-- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
- return UIInterfaceOrientationMaskAll;
-}
-
-- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
- if ([self.preferredOrientation.lowercaseString isEqualToString:@"landscape"]) {
- return UIInterfaceOrientationLandscapeRight;
- }
- else if ([self.preferredOrientation.lowercaseString isEqualToString:@"portrait"]) {
- return UIInterfaceOrientationPortrait;
- }
- else { // default case
- UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
- return orientation;
- }
-}
-#endif
-
-@end
diff --git a/ios/Video/RCTVideoPlayerViewController.swift b/ios/Video/RCTVideoPlayerViewController.swift
new file mode 100644
index 00000000..e398e62f
--- /dev/null
+++ b/ios/Video/RCTVideoPlayerViewController.swift
@@ -0,0 +1,47 @@
+import AVKit
+
+class RCTVideoPlayerViewController: AVPlayerViewController {
+
+ var rctDelegate:RCTVideoPlayerViewControllerDelegate!
+
+ // Optional paramters
+ var preferredOrientation:String?
+ var autorotate:Bool?
+
+ func shouldAutorotate() -> Bool {
+
+ if autorotate! || preferredOrientation == nil || (preferredOrientation!.lowercased() == "all") {
+ return true
+ }
+
+ return false
+ }
+
+ override func viewDidDisappear(_ animated: Bool) {
+ super.viewDidDisappear(animated)
+
+ if rctDelegate != nil {
+ rctDelegate.videoPlayerViewControllerWillDismiss(playerViewController: self)
+ rctDelegate.videoPlayerViewControllerDidDismiss(playerViewController: self)
+ }
+ }
+
+ #if !TARGET_OS_TV
+
+ func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
+ return .all
+ }
+
+ func preferredInterfaceOrientationForPresentation() -> UIInterfaceOrientation {
+ if preferredOrientation?.lowercased() == "landscape" {
+ return .landscapeRight
+ } else if preferredOrientation?.lowercased() == "portrait" {
+ return .portrait
+ } else {
+ // default case
+ let orientation = UIApplication.shared.statusBarOrientation
+ return orientation
+ }
+ }
+ #endif
+}
diff --git a/ios/Video/RCTVideoPlayerViewControllerDelegate.h b/ios/Video/RCTVideoPlayerViewControllerDelegate.h
deleted file mode 100644
index e84b3f52..00000000
--- a/ios/Video/RCTVideoPlayerViewControllerDelegate.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#import
-#import "AVKit/AVKit.h"
-
-@protocol RCTVideoPlayerViewControllerDelegate
-- (void)videoPlayerViewControllerWillDismiss:(AVPlayerViewController *)playerViewController;
-- (void)videoPlayerViewControllerDidDismiss:(AVPlayerViewController *)playerViewController;
-@end
diff --git a/ios/Video/RCTVideoPlayerViewControllerDelegate.swift b/ios/Video/RCTVideoPlayerViewControllerDelegate.swift
new file mode 100644
index 00000000..6635975f
--- /dev/null
+++ b/ios/Video/RCTVideoPlayerViewControllerDelegate.swift
@@ -0,0 +1,7 @@
+import Foundation
+import AVKit
+
+protocol RCTVideoPlayerViewControllerDelegate : NSObject {
+ func videoPlayerViewControllerWillDismiss(playerViewController:AVPlayerViewController)
+ func videoPlayerViewControllerDidDismiss(playerViewController:AVPlayerViewController)
+}
diff --git a/ios/Video/RCTVideoSwiftLog/RCTVideoSwiftLog.h b/ios/Video/RCTVideoSwiftLog/RCTVideoSwiftLog.h
new file mode 100644
index 00000000..f9978dc8
--- /dev/null
+++ b/ios/Video/RCTVideoSwiftLog/RCTVideoSwiftLog.h
@@ -0,0 +1,11 @@
+#import