mirror of
https://github.com/spacedriveapp/spacedrive
synced 2024-07-02 10:03:28 +00:00
Mobile CI with Tests (#631)
* stuff * stuff (but for android) * test mobile ci * move pnpm up * install ndk * add ios & cleanup * onboarding flow test * test ci * fixes, cleanup, caches * why you do this cargo * fix pnpm-lock * add path to build rust script? * ci is fun * yolo * fix broken flow.. * fix pnpm * probably not gonna work * test x2 * use real branch of pcr * android emulator and try ios x2 * Use react native architectures, instead of all. * override architecture to speed up android build * protoc & build android on macos too * fix java ndk * android gradle * disable ios for now * use simulator sdk & debug configuration on ios build * cleanup * avd test * fix avd settings. * only build for x86_64 on ci * Fix ios build * Add IOS testing * maestro script * ios release build & wait for library creation * clean up and disable android for now * fix pnpm-lock * Add concurrency to cancel previous runs * fix pnpm-lock --------- Co-authored-by: Brendan Allan <brendonovich@outlook.com>
This commit is contained in:
parent
76c70d1052
commit
54a2eee827
1
.github/scripts/setup-system.sh
vendored
1
.github/scripts/setup-system.sh
vendored
|
@ -58,6 +58,7 @@ if [ "${1:-}" == "mobile" ]; then
|
|||
|
||||
rustup target add aarch64-apple-ios
|
||||
rustup target add aarch64-apple-ios-sim
|
||||
rustup target add x86_64-apple-ios # for CI
|
||||
fi
|
||||
|
||||
# Android requires python
|
||||
|
|
5
.github/workflows/ci.yml
vendored
5
.github/workflows/ci.yml
vendored
|
@ -12,6 +12,11 @@ on:
|
|||
env:
|
||||
SPACEDRIVE_CUSTOM_APT_FLAGS: --no-install-recommends
|
||||
|
||||
# Cancel previous runs of the same workflow on the same branch.
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
typescript:
|
||||
name: TypeScript
|
||||
|
|
211
.github/workflows/mobile-ci.yml
vendored
Normal file
211
.github/workflows/mobile-ci.yml
vendored
Normal file
|
@ -0,0 +1,211 @@
|
|||
name: Mobile CI
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths-ignore:
|
||||
- '**/.md'
|
||||
workflow_dispatch:
|
||||
|
||||
env:
|
||||
SPACEDRIVE_CUSTOM_APT_FLAGS: --no-install-recommends
|
||||
SPACEDRIVE_CI: '1'
|
||||
|
||||
# Cancel previous runs of the same workflow on the same branch.
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
# Disabled until I can figure out why our app on x86_64 crashes on startup.
|
||||
# android:
|
||||
# name: Android
|
||||
# runs-on: macos-12
|
||||
# steps:
|
||||
# - name: Checkout repository
|
||||
# uses: actions/checkout@v3
|
||||
|
||||
# - name: Setup Java JDK
|
||||
# uses: actions/setup-java@v3.10.0
|
||||
# with:
|
||||
# java-version: '18'
|
||||
# distribution: 'temurin'
|
||||
|
||||
# - name: Install pnpm
|
||||
# uses: pnpm/action-setup@v2.2.2
|
||||
# with:
|
||||
# version: 7.x.x
|
||||
|
||||
# - name: Install Node.js
|
||||
# uses: actions/setup-node@v3
|
||||
# with:
|
||||
# node-version: 18
|
||||
# cache: 'pnpm'
|
||||
|
||||
# - name: Install Rust stable
|
||||
# uses: actions-rs/toolchain@v1
|
||||
# with:
|
||||
# toolchain: stable
|
||||
# profile: minimal
|
||||
|
||||
# - name: Cache Rust deps
|
||||
# uses: Swatinem/rust-cache@v2
|
||||
# with:
|
||||
# save-if: ${{ inputs.save-cache }} == "true"
|
||||
|
||||
# - name: Run 'setup-system.sh' script
|
||||
# shell: bash
|
||||
# run: ./.github/scripts/setup-system.sh mobile
|
||||
|
||||
# - name: Generate Prisma client
|
||||
# uses: ./.github/actions/generate-prisma-client
|
||||
|
||||
# - name: Install pnpm dependencies
|
||||
# run: pnpm i --frozen-lockfile
|
||||
|
||||
# - name: Setup Android SDK Tools
|
||||
# uses: android-actions/setup-android@v2.0.2
|
||||
|
||||
# - name: Cache NDK
|
||||
# uses: actions/cache@v3
|
||||
# with:
|
||||
# path: ${{ env.ANDROID_HOME }}/ndk/23.1.7779620
|
||||
# key: ndk-23.1.7779620
|
||||
|
||||
# - name: Install NDK
|
||||
# run: echo "y" | sudo ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager --install "ndk;23.1.7779620"
|
||||
|
||||
# - name: Cache Gradle
|
||||
# uses: gradle/gradle-build-action@v2
|
||||
|
||||
# - name: Build Android
|
||||
# working-directory: ./apps/mobile/android
|
||||
# run: chmod +x ./gradlew && ./gradlew assembleRelease -PreactNativeArchitectures=x86_64 --no-daemon
|
||||
|
||||
# - name: Cache AVD
|
||||
# uses: actions/cache@v3
|
||||
# id: avd-cache
|
||||
# with:
|
||||
# path: |
|
||||
# ~/.android/avd/*
|
||||
# ~/.android/adb*
|
||||
# key: avd-30
|
||||
|
||||
# - name: Generate AVD Snapshot
|
||||
# if: steps.avd-cache.outputs.cache-hit != 'true'
|
||||
# uses: ReactiveCircus/android-emulator-runner@v2.28.0
|
||||
# with:
|
||||
# arch: x86_64
|
||||
# api-level: 30
|
||||
# target: google_apis
|
||||
# ndk: 23.1.7779620
|
||||
# ram-size: 4096M
|
||||
# emulator-boot-timeout: 12000
|
||||
# force-avd-creation: false
|
||||
# emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
|
||||
# disable-animations: false
|
||||
# script: echo "Generated AVD snapshot."
|
||||
|
||||
# - name: Install Maestro
|
||||
# run: |
|
||||
# # workaround for https://github.com/mobile-dev-inc/maestro/issues/877
|
||||
# export MAESTRO_VERSION=1.21.3; curl -Ls "https://get.maestro.mobile.dev" | bash
|
||||
# echo "$HOME/.maestro/bin" >> $GITHUB_PATH
|
||||
|
||||
# - name: Run Tests
|
||||
# uses: ReactiveCircus/android-emulator-runner@v2.28.0
|
||||
# with:
|
||||
# arch: x86_64
|
||||
# api-level: 30
|
||||
# target: google_apis
|
||||
# ndk: 23.1.7779620
|
||||
# ram-size: 4096M
|
||||
# emulator-boot-timeout: 12000
|
||||
# force-avd-creation: false
|
||||
# emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
|
||||
# disable-animations: true
|
||||
# script: |
|
||||
# adb install -r apps/mobile/android/app/build/outputs/apk/release/app-release.apk
|
||||
# adb wait-for-device
|
||||
# bash ./apps/mobile/scripts/run-maestro-tests android
|
||||
|
||||
ios:
|
||||
name: iOS
|
||||
runs-on: macos-12
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Install Xcode
|
||||
uses: maxim-lobanov/setup-xcode@v1.5.1
|
||||
with:
|
||||
xcode-version: latest-stable
|
||||
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v2.2.2
|
||||
with:
|
||||
version: 7.x.x
|
||||
|
||||
- name: Install Node.js
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 18
|
||||
cache: 'pnpm'
|
||||
|
||||
- name: Install Rust stable
|
||||
uses: actions-rs/toolchain@v1
|
||||
with:
|
||||
toolchain: stable
|
||||
profile: minimal
|
||||
|
||||
- name: Cache Rust deps
|
||||
uses: Swatinem/rust-cache@v2
|
||||
with:
|
||||
save-if: ${{ inputs.save-cache }} == "true"
|
||||
|
||||
- name: Run 'setup-system.sh' script
|
||||
shell: bash
|
||||
run: ./.github/scripts/setup-system.sh mobile
|
||||
|
||||
- name: Generate Prisma client
|
||||
uses: ./.github/actions/generate-prisma-client
|
||||
|
||||
- name: Install pnpm dependencies
|
||||
run: pnpm i --frozen-lockfile
|
||||
|
||||
- name: Cache Pods
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: |
|
||||
./apps/mobile/ios/Pods
|
||||
~/Library/Caches/CocoaPods
|
||||
~/.cocoapods
|
||||
key: pods-${{ hashFiles('./apps/mobile/ios/Podfile.lock') }}
|
||||
restore-keys: pods-
|
||||
|
||||
- name: Install Pods
|
||||
working-directory: ./apps/mobile/ios
|
||||
run: pod install --repo-update
|
||||
|
||||
- name: Build iOS
|
||||
working-directory: ./apps/mobile/ios
|
||||
run: xcodebuild -workspace ./Spacedrive.xcworkspace -scheme Spacedrive -configuration Release -sdk iphonesimulator -derivedDataPath build -arch x86_64
|
||||
|
||||
- name: Install Maestro
|
||||
run: |
|
||||
curl -Ls "https://get.maestro.mobile.dev" | bash
|
||||
brew tap facebook/fb
|
||||
brew install facebook/fb/idb-companion
|
||||
echo "$HOME/.maestro/bin" >> $GITHUB_PATH
|
||||
|
||||
- name: Run Simulator
|
||||
uses: futureware-tech/simulator-action@v2
|
||||
with:
|
||||
model: 'iPhone 11'
|
||||
|
||||
- name: Run Tests
|
||||
run: |
|
||||
xcrun simctl install booted apps/mobile/ios/build/Build/Products/Release-iphonesimulator/Spacedrive.app
|
||||
bash ./apps/mobile/scripts/run-maestro-tests ios
|
6
.vscode/settings.json
vendored
6
.vscode/settings.json
vendored
|
@ -48,10 +48,10 @@
|
|||
"search.exclude": {
|
||||
"**/node_modules": true,
|
||||
"**/bower_components": true,
|
||||
"**/*.code-search": true,
|
||||
"**/*.code-search": true
|
||||
// Hiding these folders bcs they create a lot of noise in the search results
|
||||
"apps/mobile/android": true,
|
||||
"apps/mobile/ios": true
|
||||
// "apps/mobile/android": true
|
||||
// "apps/mobile/ios": true
|
||||
},
|
||||
"eslint.workingDirectories": [
|
||||
"apps/landing",
|
||||
|
|
6
Cargo.lock
generated
6
Cargo.lock
generated
|
@ -5491,7 +5491,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "prisma-client-rust"
|
||||
version = "0.6.4"
|
||||
source = "git+https://github.com/Brendonovich/prisma-client-rust?rev=c965b89f1a07a6931d90f4b5556421f7ffcda03b#c965b89f1a07a6931d90f4b5556421f7ffcda03b"
|
||||
source = "git+https://github.com/Brendonovich/prisma-client-rust?branch=spacedrive#c965b89f1a07a6931d90f4b5556421f7ffcda03b"
|
||||
dependencies = [
|
||||
"base64 0.13.1",
|
||||
"bigdecimal",
|
||||
|
@ -5525,7 +5525,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "prisma-client-rust-cli"
|
||||
version = "0.6.4"
|
||||
source = "git+https://github.com/Brendonovich/prisma-client-rust?rev=c965b89f1a07a6931d90f4b5556421f7ffcda03b#c965b89f1a07a6931d90f4b5556421f7ffcda03b"
|
||||
source = "git+https://github.com/Brendonovich/prisma-client-rust?branch=spacedrive#c965b89f1a07a6931d90f4b5556421f7ffcda03b"
|
||||
dependencies = [
|
||||
"directories",
|
||||
"flate2",
|
||||
|
@ -5545,7 +5545,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "prisma-client-rust-sdk"
|
||||
version = "0.6.4"
|
||||
source = "git+https://github.com/Brendonovich/prisma-client-rust?rev=c965b89f1a07a6931d90f4b5556421f7ffcda03b#c965b89f1a07a6931d90f4b5556421f7ffcda03b"
|
||||
source = "git+https://github.com/Brendonovich/prisma-client-rust?branch=spacedrive#c965b89f1a07a6931d90f4b5556421f7ffcda03b"
|
||||
dependencies = [
|
||||
"convert_case 0.5.0",
|
||||
"dml",
|
||||
|
|
|
@ -13,19 +13,19 @@ members = [
|
|||
]
|
||||
|
||||
[workspace.dependencies]
|
||||
prisma-client-rust = { git = "https://github.com/Brendonovich/prisma-client-rust", rev = "c965b89f1a07a6931d90f4b5556421f7ffcda03b", features = [
|
||||
prisma-client-rust = { git = "https://github.com/Brendonovich/prisma-client-rust", branch = "spacedrive", features = [
|
||||
"rspc",
|
||||
"sqlite-create-many",
|
||||
"migrations",
|
||||
"sqlite",
|
||||
], default-features = false }
|
||||
prisma-client-rust-cli = { git = "https://github.com/Brendonovich/prisma-client-rust", rev = "c965b89f1a07a6931d90f4b5556421f7ffcda03b", features = [
|
||||
prisma-client-rust-cli = { git = "https://github.com/Brendonovich/prisma-client-rust", branch = "spacedrive", features = [
|
||||
"rspc",
|
||||
"sqlite-create-many",
|
||||
"migrations",
|
||||
"sqlite",
|
||||
], default-features = false }
|
||||
prisma-client-rust-sdk = { git = "https://github.com/Brendonovich/prisma-client-rust", rev = "c965b89f1a07a6931d90f4b5556421f7ffcda03b", features = [
|
||||
prisma-client-rust-sdk = { git = "https://github.com/Brendonovich/prisma-client-rust", branch = "spacedrive", features = [
|
||||
"sqlite",
|
||||
], default-features = false }
|
||||
|
||||
|
|
11
apps/mobile/.gitignore
vendored
11
apps/mobile/.gitignore
vendored
|
@ -30,6 +30,9 @@ build/
|
|||
local.properties
|
||||
*.iml
|
||||
*.hprof
|
||||
.cxx/
|
||||
*.keystore
|
||||
!debug.keystore
|
||||
|
||||
# node.js
|
||||
#
|
||||
|
@ -43,10 +46,10 @@ yarn-error.log
|
|||
# CocoaPods
|
||||
/ios/Pods/
|
||||
|
||||
# Temporary files created by Metro to check the health of the file watcher
|
||||
.metro-health-check*
|
||||
|
||||
# Expo
|
||||
.expo/
|
||||
web-build/
|
||||
dist/
|
||||
|
||||
# Temporary files created by Metro to check the health of the file watcher
|
||||
.metro-health-check*
|
||||
dist/
|
|
@ -3,18 +3,25 @@ apply plugin: "com.facebook.react"
|
|||
|
||||
import com.android.build.OutputFile
|
||||
|
||||
|
||||
// SPACEDRIVE CODE
|
||||
|
||||
apply plugin: 'org.mozilla.rust-android-gradle.rust-android'
|
||||
|
||||
def cargoTargets = []
|
||||
|
||||
if (System.getenv('SPACEDRIVE_CI') == "1") {
|
||||
cargoTargets = ["x86_64"]
|
||||
} else {
|
||||
cargoTargets = ["arm", "arm64", "x86", "x86_64"]
|
||||
}
|
||||
|
||||
|
||||
cargo {
|
||||
module = "../../crates/android"
|
||||
libname = "sd_mobile_android"
|
||||
pythonCommand = 'python3'
|
||||
profile = 'release'
|
||||
targets = ["arm", "arm64", "x86", "x86_64"]
|
||||
// profile = 'debug'
|
||||
// targets = ["arm64"]
|
||||
profile = 'release' // 'debug'
|
||||
targets = cargoTargets
|
||||
targetDirectory = "../.././../../target" // Monorepo moment
|
||||
|
||||
}
|
||||
|
@ -25,7 +32,7 @@ tasks.whenTaskAdded { task ->
|
|||
}
|
||||
}
|
||||
|
||||
// SPACEDRIVE CODE END
|
||||
// END SPACEDRIVE CODE
|
||||
|
||||
def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath()
|
||||
def expoDebuggableVariants = ['debug']
|
||||
|
@ -46,11 +53,6 @@ react {
|
|||
reactNativeDir = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()
|
||||
hermesCommand = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/sdks/hermesc/%OS-BIN%/hermesc"
|
||||
debuggableVariants = expoDebuggableVariants
|
||||
|
||||
// Use Expo CLI to bundle the app, this ensures the Metro config
|
||||
// works correctly with Expo projects.
|
||||
cliFile = new File(["node", "--print", "require.resolve('@expo/cli')"].execute(null, rootDir).text.trim())
|
||||
bundleCommand = "export:embed"
|
||||
|
||||
/* Folders */
|
||||
// The root of your project, i.e. where "package.json" lives. Default is '..'
|
||||
|
@ -59,6 +61,8 @@ react {
|
|||
// reactNativeDir = file("../node_modules/react-native")
|
||||
// The folder where the react-native Codegen package is. Default is ../node_modules/react-native-codegen
|
||||
// codegenDir = file("../node_modules/react-native-codegen")
|
||||
// The cli.js file which is the React Native CLI entrypoint. Default is ../node_modules/react-native/cli.js
|
||||
// cliFile = file("../node_modules/react-native/cli.js")
|
||||
|
||||
/* Variants */
|
||||
// The list of variants to that are debuggable. For those we're going to
|
||||
|
@ -69,7 +73,9 @@ react {
|
|||
/* Bundling */
|
||||
// A list containing the node command and its flags. Default is just 'node'.
|
||||
// nodeExecutableAndArgs = ["node"]
|
||||
|
||||
//
|
||||
// The command to run when bundling. By default is 'bundle'
|
||||
// bundleCommand = "ram-bundle"
|
||||
//
|
||||
// The path to the CLI configuration file. Default is empty.
|
||||
// bundleConfig = file(../rn-cli.config.js)
|
||||
|
@ -138,8 +144,9 @@ android {
|
|||
|
||||
compileSdkVersion rootProject.ext.compileSdkVersion
|
||||
|
||||
namespace 'com.spacedrive.app'
|
||||
defaultConfig {
|
||||
applicationId "com.spacedrive.app"
|
||||
applicationId 'com.spacedrive.app'
|
||||
minSdkVersion rootProject.ext.minSdkVersion
|
||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||
versionCode 1
|
||||
|
@ -257,4 +264,4 @@ dependencies {
|
|||
}
|
||||
|
||||
apply from: new File(["node", "--print", "require.resolve('@react-native-community/cli-platform-android/package.json')"].execute(null, rootDir).text.trim(), "../native_modules.gradle");
|
||||
applyNativeModulesAppBuildGradle(project)
|
||||
applyNativeModulesAppBuildGradle(project)
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.spacedrive.app">
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<!-- For accessing lat & long and EXIF tags on assets -->
|
||||
<!-- Spacedrive - For accessing lat & long and EXIF tags on assets -->
|
||||
<uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION" />
|
||||
<queries>
|
||||
<intent>
|
||||
|
@ -13,13 +13,22 @@
|
|||
<data android:scheme="https" />
|
||||
</intent>
|
||||
</queries>
|
||||
<application android:requestLegacyExternalStorage="true" android:name=".MainApplication" android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:roundIcon="@mipmap/ic_launcher_round" android:allowBackup="true" android:theme="@style/AppTheme" android:usesCleartextTraffic="true">
|
||||
<application android:name=".MainApplication" android:label="@string/app_name"
|
||||
android:icon="@mipmap/ic_launcher" android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:allowBackup="true" android:theme="@style/AppTheme" android:usesCleartextTraffic="true"
|
||||
android:requestLegacyExternalStorage="true">
|
||||
<meta-data android:name="expo.modules.updates.ENABLED" android:value="false" />
|
||||
<meta-data android:name="expo.modules.updates.EXPO_SDK_VERSION" android:value="46.0.0" />
|
||||
<meta-data android:name="expo.modules.updates.EXPO_UPDATES_CHECK_ON_LAUNCH" android:value="ALWAYS" />
|
||||
<meta-data android:name="expo.modules.updates.EXPO_SDK_VERSION" android:value="48.0.0" />
|
||||
<meta-data android:name="expo.modules.updates.EXPO_UPDATES_CHECK_ON_LAUNCH"
|
||||
android:value="ALWAYS" />
|
||||
<meta-data android:name="expo.modules.updates.EXPO_UPDATES_LAUNCH_WAIT_MS" android:value="0" />
|
||||
<meta-data android:name="expo.modules.updates.EXPO_UPDATE_URL" android:value="https://exp.host/@utkudev/spacedrive" />
|
||||
<activity android:name=".MainActivity" android:label="@string/app_name" android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode" android:launchMode="singleTask" android:windowSoftInputMode="adjustResize" android:theme="@style/Theme.App.SplashScreen" android:exported="true" android:screenOrientation="portrait">
|
||||
<meta-data android:name="expo.modules.updates.EXPO_UPDATE_URL"
|
||||
android:value="https://exp.host/@spacedrive/spacedrive" />
|
||||
<activity android:name=".MainActivity" android:label="@string/app_name"
|
||||
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
|
||||
android:launchMode="singleTask" android:windowSoftInputMode="adjustResize"
|
||||
android:theme="@style/Theme.App.SplashScreen" android:exported="true"
|
||||
android:screenOrientation="portrait">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
|
@ -32,6 +41,7 @@
|
|||
<data android:scheme="com.spacedrive.app" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" android:exported="false" />
|
||||
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity"
|
||||
android:exported="false" />
|
||||
</application>
|
||||
</manifest>
|
|
@ -1,48 +0,0 @@
|
|||
THIS_DIR := $(call my-dir)
|
||||
|
||||
include $(REACT_ANDROID_DIR)/Android-prebuilt.mk
|
||||
|
||||
# If you wish to add a custom TurboModule or Fabric component in your app you
|
||||
# will have to include the following autogenerated makefile.
|
||||
# include $(GENERATED_SRC_DIR)/codegen/jni/Android.mk
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
LOCAL_PATH := $(THIS_DIR)
|
||||
|
||||
# You can customize the name of your application .so file here.
|
||||
LOCAL_MODULE := spacedrive_appmodules
|
||||
|
||||
LOCAL_C_INCLUDES := $(LOCAL_PATH)
|
||||
LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/*.cpp)
|
||||
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
|
||||
|
||||
# If you wish to add a custom TurboModule or Fabric component in your app you
|
||||
# will have to uncomment those lines to include the generated source
|
||||
# files from the codegen (placed in $(GENERATED_SRC_DIR)/codegen/jni)
|
||||
#
|
||||
# LOCAL_C_INCLUDES += $(GENERATED_SRC_DIR)/codegen/jni
|
||||
# LOCAL_SRC_FILES += $(wildcard $(GENERATED_SRC_DIR)/codegen/jni/*.cpp)
|
||||
# LOCAL_EXPORT_C_INCLUDES += $(GENERATED_SRC_DIR)/codegen/jni
|
||||
|
||||
# Here you should add any native library you wish to depend on.
|
||||
LOCAL_SHARED_LIBRARIES := \
|
||||
libfabricjni \
|
||||
libfbjni \
|
||||
libfolly_runtime \
|
||||
libglog \
|
||||
libjsi \
|
||||
libreact_codegen_rncore \
|
||||
libreact_debug \
|
||||
libreact_nativemodule_core \
|
||||
libreact_render_componentregistry \
|
||||
libreact_render_core \
|
||||
libreact_render_debug \
|
||||
libreact_render_graphics \
|
||||
librrc_view \
|
||||
libruntimeexecutor \
|
||||
libturbomodulejsijni \
|
||||
libyoga
|
||||
|
||||
LOCAL_CFLAGS := -DLOG_TAG=\"ReactNative\" -fexceptions -frtti -std=c++17 -Wall
|
||||
|
||||
include $(BUILD_SHARED_LIBRARY)
|
|
@ -1,3 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:drawable="@color/splashscreen_background"/>
|
||||
<item android:drawable="@color/splashscreen_background" />
|
||||
</layer-list>
|
|
@ -1,6 +1,3 @@
|
|||
<resources>
|
||||
<string name="app_name">Spacedrive</string>
|
||||
<string name="expo_splash_screen_resize_mode" translatable="false">contain</string>
|
||||
<string name="expo_splash_screen_status_bar_translucent" translatable="false">false</string>
|
||||
<string name="expo_system_ui_user_interface_style" translatable="false">automatic</string>
|
||||
</resources>
|
|
@ -1,5 +1,3 @@
|
|||
import org.apache.tools.ant.taskdefs.condition.Os
|
||||
|
||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||
|
||||
buildscript {
|
||||
|
@ -34,7 +32,6 @@ buildscript {
|
|||
|
||||
allprojects {
|
||||
repositories {
|
||||
mavenLocal()
|
||||
maven {
|
||||
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
|
||||
url(new File(['node', '--print', "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim(), '../android'))
|
||||
|
|
Binary file not shown.
|
@ -1,29 +0,0 @@
|
|||
{
|
||||
"cli": {
|
||||
"version": ">= 0.56.0",
|
||||
"promptToConfigurePushNotifications": false
|
||||
},
|
||||
"build": {
|
||||
"production": {
|
||||
"node": "18.12.1"
|
||||
},
|
||||
"preview": {
|
||||
"extends": "production",
|
||||
"distribution": "internal"
|
||||
},
|
||||
"development": {
|
||||
"extends": "production",
|
||||
"developmentClient": true,
|
||||
"distribution": "internal",
|
||||
"android": {
|
||||
"gradleCommand": ":app:assembleDebug"
|
||||
},
|
||||
"ios": {
|
||||
"buildConfiguration": "Debug"
|
||||
}
|
||||
}
|
||||
},
|
||||
"submit": {
|
||||
"production": {}
|
||||
}
|
||||
}
|
|
@ -86,4 +86,4 @@ target 'Spacedrive' do
|
|||
Pod::UI.warn e
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -9,7 +9,7 @@ PODS:
|
|||
- ExpoModulesCore
|
||||
- EXFont (11.1.1):
|
||||
- ExpoModulesCore
|
||||
- EXMediaLibrary (15.2.2):
|
||||
- EXMediaLibrary (15.2.3):
|
||||
- ExpoModulesCore
|
||||
- React-Core
|
||||
- Expo (48.0.6):
|
||||
|
@ -609,7 +609,7 @@ SPEC CHECKSUMS:
|
|||
EXConstants: f348da07e21b23d2b085e270d7b74f282df1a7d9
|
||||
EXFileSystem: 844e86ca9b5375486ecc4ef06d3838d5597d895d
|
||||
EXFont: 6ea3800df746be7233208d80fe379b8ed74f4272
|
||||
EXMediaLibrary: 792fe9b828b5bfa2c5a8b629730f175af2938285
|
||||
EXMediaLibrary: 587cd8aad27a6fc8d7c38b950bc75bc1845a7480
|
||||
Expo: 04ba1ddde0be07aff4306ae636a1804810679145
|
||||
ExpoKeepAwake: 69f5f627670d62318410392d03e0b5db0f85759a
|
||||
ExpoModulesCore: 1667335d4f4c9b7801990930e6f0eea42c916a21
|
||||
|
@ -661,6 +661,6 @@ SPEC CHECKSUMS:
|
|||
RNSVG: 07dbd870b0dcdecc99b3a202fa37c8ca163caec2
|
||||
Yoga: 5ed1699acbba8863755998a4245daa200ff3817b
|
||||
|
||||
PODFILE CHECKSUM: 17065850599b1e955efad7a619cf825c012744d7
|
||||
PODFILE CHECKSUM: a82d2337be62e4c4d092a59fb73875196b22ca98
|
||||
|
||||
COCOAPODS: 1.11.3
|
||||
|
|
|
@ -147,8 +147,8 @@
|
|||
buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "Spacedrive" */;
|
||||
buildPhases = (
|
||||
BC1F37E21575379C81F561DC /* [CP] Check Pods Manifest.lock */,
|
||||
FD10A7F022414F080027D42C /* Start Packager */,
|
||||
350DC403297BF2B8009CD6A1 /* Build Spacedrive Core */,
|
||||
FD10A7F022414F080027D42C /* Start Packager */,
|
||||
13B07F871A680F5B00A75B9A /* Sources */,
|
||||
13B07F8C1A680F5B00A75B9A /* Frameworks */,
|
||||
13B07F8E1A680F5B00A75B9A /* Resources */,
|
||||
|
@ -222,7 +222,7 @@
|
|||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "export NODE_BINARY=node\n\n# The project root by default is one level up from the ios directory\nexport PROJECT_ROOT=\"$PROJECT_DIR\"/..\n\n`node --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/scripts/react-native-xcode.sh'\"`\n";
|
||||
shellScript = "if [[ -f \"$PODS_ROOT/../.xcode.env\" ]]; then\n source \"$PODS_ROOT/../.xcode.env\"\nfi\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\n# The project root by default is one level up from the ios directory\nexport PROJECT_ROOT=\"$PROJECT_DIR\"/..\n\nif [[ \"$CONFIGURATION\" = *Debug* ]]; then\n export SKIP_BUNDLING=1\nfi\nif [[ -z \"$ENTRY_FILE\" ]]; then\n # Set the entry JS file using the bundler's entry resolution.\n export ENTRY_FILE=\"$(\"$NODE_BINARY\" -e \"require('expo/scripts/resolveAppEntry')\" $PROJECT_ROOT ios relative | tail -n 1)\"\nfi\n\n`\"$NODE_BINARY\" --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/scripts/react-native-xcode.sh'\"`\n\n";
|
||||
};
|
||||
350DC403297BF2B8009CD6A1 /* Build Spacedrive Core */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
|
@ -241,7 +241,7 @@
|
|||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/zsh;
|
||||
shellScript = "env -i CONFIGURATION=$CONFIGURATION PLATFORM_NAME=$PLATFORM_NAME ./build-rust.sh\n";
|
||||
shellScript = "env -i SPACEDRIVE_CI=$SPACEDRIVE_CI CONFIGURATION=$CONFIGURATION PLATFORM_NAME=$PLATFORM_NAME ./build-rust.sh\n";
|
||||
};
|
||||
65CB42BC732A49C59CCA544A /* [CP] Embed Pods Frameworks */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
|
@ -299,7 +299,7 @@
|
|||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "export RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > `node --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/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 `node --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/scripts/launchPackager.command'\"` || echo \"Can't start packager automatically\"\n fi\nfi\n";
|
||||
shellScript = "if [[ -f \"$PODS_ROOT/../.xcode.env\" ]]; then\n source \"$PODS_ROOT/../.xcode.env\"\nfi\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\nexport RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > `$NODE_BINARY --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/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 `$NODE_BINARY --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/scripts/launchPackager.command'\"` || echo \"Can't start packager automatically\"\n fi\nfi\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
FFF29AD1ADC998E2209017DB /* [CP] Copy Pods Resources */ = {
|
||||
|
@ -432,6 +432,7 @@
|
|||
PRODUCT_BUNDLE_IDENTIFIER = com.spacedrive.app;
|
||||
PRODUCT_NAME = Spacedrive;
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
SUPPORTED_PLATFORMS = "iphonesimulator iphoneos";
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = 1;
|
||||
|
@ -527,6 +528,7 @@
|
|||
PRODUCT_BUNDLE_IDENTIFIER = com.spacedrive.app;
|
||||
PRODUCT_NAME = Spacedrive;
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
SUPPORTED_PLATFORMS = "iphonesimulator iphoneos";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = 1;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
|
|
|
@ -28,16 +28,6 @@
|
|||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||
<Testables>
|
||||
<TestableReference
|
||||
skipped = "NO">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "00E356ED1AD99517003FC87E"
|
||||
BuildableName = "mobilenewTests.xctest"
|
||||
BlueprintName = "mobilenewTests"
|
||||
ReferencedContainer = "container:Spacedrive.xcodeproj">
|
||||
</BuildableReference>
|
||||
</TestableReference>
|
||||
</Testables>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
|
@ -52,15 +42,6 @@
|
|||
allowLocationSimulation = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
|
||||
BuildableName = "Spacedrive.app"
|
||||
BlueprintName = "Spacedrive"
|
||||
ReferencedContainer = "container:spacedrive.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
|
||||
|
@ -68,7 +49,7 @@
|
|||
BlueprintName = "Spacedrive"
|
||||
ReferencedContainer = "container:Spacedrive.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
</BuildableProductRunnable>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
|
|
|
@ -4,4 +4,4 @@
|
|||
|
||||
@interface AppDelegate : EXAppDelegateWrapper
|
||||
|
||||
@end
|
||||
@end
|
||||
|
|
|
@ -64,4 +64,4 @@
|
|||
return [super application:application didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler];
|
||||
}
|
||||
|
||||
@end
|
||||
@end
|
||||
|
|
|
@ -11,6 +11,6 @@
|
|||
<key>EXUpdatesSDKVersion</key>
|
||||
<string>48.0.0</string>
|
||||
<key>EXUpdatesURL</key>
|
||||
<string>https://exp.host/@utkudev/spacedrive</string>
|
||||
<string>https://exp.host/@spacedrive/spacedrive</string>
|
||||
</dict>
|
||||
</plist>
|
|
@ -6,4 +6,5 @@ int main(int argc, char * argv[]) {
|
|||
@autoreleasepool {
|
||||
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,8 +2,6 @@
|
|||
|
||||
set -e
|
||||
|
||||
export PROTOC=/opt/homebrew/bin/protoc
|
||||
|
||||
TARGET_DIRECTORY=../../../target
|
||||
|
||||
CARGO_FLAGS=
|
||||
|
@ -11,6 +9,27 @@ if [[ $CONFIGURATION != "Debug" ]]; then
|
|||
CARGO_FLAGS=--release
|
||||
fi
|
||||
|
||||
# TODO: Also do this for non-Apple Silicon Macs
|
||||
if [[ $SPACEDRIVE_CI == "1" ]]; then
|
||||
|
||||
# Required for CI
|
||||
export PATH="$HOME/.cargo/bin:$PATH"
|
||||
export PROTOC=/usr/local/bin/protoc
|
||||
|
||||
cargo build -p sd-mobile-ios --target x86_64-apple-ios
|
||||
|
||||
if [[ $PLATFORM_NAME = "iphonesimulator" ]]
|
||||
then
|
||||
lipo -create -output $TARGET_DIRECTORY/libsd_mobile_ios-iossim.a $TARGET_DIRECTORY/x86_64-apple-ios/debug/libsd_mobile_ios.a
|
||||
else
|
||||
lipo -create -output $TARGET_DIRECTORY/libsd_mobile_ios-ios.a $TARGET_DIRECTORY/x86_64-apple-ios/debug/libsd_mobile_ios.a
|
||||
fi
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Required for M1 Mac builds (?)
|
||||
export PROTOC=/opt/homebrew/bin/protoc
|
||||
|
||||
if [[ $PLATFORM_NAME = "iphonesimulator" ]]
|
||||
then
|
||||
cargo build -p sd-mobile-ios --target aarch64-apple-ios-sim
|
||||
|
|
|
@ -12,7 +12,8 @@
|
|||
"android-studio": "open -a '/Applications/Android Studio.app' ./android",
|
||||
"lint": "eslint src",
|
||||
"typecheck": "tsc -b",
|
||||
"eas-build-pre-install": "npm i -g pnpm@7.18.2"
|
||||
"clean:android": "cd android && ./gradlew clean && cd ../",
|
||||
"clean:ios": "cd ios && xcodebuild clean && cd ../"
|
||||
},
|
||||
"dependencies": {
|
||||
"@gorhom/bottom-sheet": "^4.4.5",
|
||||
|
@ -32,9 +33,9 @@
|
|||
"byte-size": "^8.1.0",
|
||||
"class-variance-authority": "^0.4.0",
|
||||
"dayjs": "^1.11.5",
|
||||
"expo": "^48.0.6",
|
||||
"expo": "~48.0.6",
|
||||
"expo-linking": "~4.0.1",
|
||||
"expo-media-library": "~15.2.2",
|
||||
"expo-media-library": "~15.2.3",
|
||||
"expo-splash-screen": "~0.18.1",
|
||||
"expo-status-bar": "~1.4.4",
|
||||
"intl": "^1.2.5",
|
||||
|
@ -60,6 +61,7 @@
|
|||
"zod": "^3.21.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.21.0",
|
||||
"@rnx-kit/metro-config": "^1.3.5",
|
||||
"@sd/config": "workspace:*",
|
||||
"@types/react": "~18.0.27",
|
||||
|
|
|
@ -1,19 +0,0 @@
|
|||
// @ts-ignore
|
||||
let fs = require('fs-extra');
|
||||
let path = require('path');
|
||||
|
||||
// Not used atm, keeping it here in case we need it in the future
|
||||
async function copyReactNativeCodegen() {
|
||||
const paths = [
|
||||
['../../../node_modules/react-native-codegen', '../node_modules/react-native-codegen'],
|
||||
['../../../node_modules/jsc-android', '../node_modules/jsc-android']
|
||||
];
|
||||
|
||||
for (const pathTuple of paths) {
|
||||
const [src, dest] = [path.join(__dirname, pathTuple[0]), path.join(__dirname, pathTuple[1])];
|
||||
await fs.remove(dest).catch(() => {});
|
||||
await fs.move(src, dest).catch(() => {});
|
||||
}
|
||||
}
|
||||
|
||||
copyReactNativeCodegen();
|
50
apps/mobile/scripts/run-maestro-tests
Normal file
50
apps/mobile/scripts/run-maestro-tests
Normal file
|
@ -0,0 +1,50 @@
|
|||
#!/bin/bash
|
||||
|
||||
trap 'exit' INT
|
||||
|
||||
PLATFORM=${1:-}
|
||||
|
||||
case $PLATFORM in
|
||||
ios | android )
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Error! You must pass either 'android' or 'ios'"
|
||||
echo ""
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# NOTE: This script is intended to be run from the root of the project (CI)
|
||||
if [ "$PLATFORM" == "ios" ]; then
|
||||
testFiles=$(ls apps/mobile/tests/*.yml apps/mobile/tests/ios-only/*.yml)
|
||||
else
|
||||
testFiles=$(ls apps/mobile/tests/*.yml apps/mobile/tests/android-only/*.yml)
|
||||
fi
|
||||
|
||||
failedTests=()
|
||||
for file in $testFiles
|
||||
do
|
||||
if ! maestro test "$file"
|
||||
then
|
||||
echo "Test ${file} failed. Retrying in 30 seconds..."
|
||||
sleep 30
|
||||
if ! maestro test "$file"
|
||||
then
|
||||
echo "Test ${file} failed again. Retrying for the last time in 120 seconds..."
|
||||
sleep 120
|
||||
if ! maestro test "$file"
|
||||
then
|
||||
failedTests+=("$file")
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
if [ ${#failedTests[@]} -eq 0 ]; then
|
||||
exit 0
|
||||
else
|
||||
echo "These tests failed:"
|
||||
printf '%s\n' "${failedTests[@]}"
|
||||
exit 1
|
||||
fi
|
|
@ -22,7 +22,11 @@ export default function Header() {
|
|||
})}
|
||||
>
|
||||
<View style={tw`flex h-10 flex-row items-center`}>
|
||||
<Pressable style={tw`h-full justify-center px-3`} onPress={() => navigation.openDrawer()}>
|
||||
<Pressable
|
||||
testID="drawer-toggle"
|
||||
style={tw`h-full justify-center px-3`}
|
||||
onPress={() => navigation.openDrawer()}
|
||||
>
|
||||
<MotiView
|
||||
animate={{ rotate: isDrawerOpen ? '90deg' : '0deg' }}
|
||||
transition={{ type: 'timing' }}
|
||||
|
|
|
@ -79,7 +79,13 @@ const MasterPasswordScreen = ({ navigation }: OnboardingStackScreenProps<'Master
|
|||
control={form.control}
|
||||
name="password"
|
||||
render={({ field: { onBlur, onChange, value } }) => (
|
||||
<PasswordInput onChangeText={onChange} onBlur={onBlur} value={value} isNewPassword />
|
||||
<PasswordInput
|
||||
testID="master-password"
|
||||
onChangeText={onChange}
|
||||
onBlur={onBlur}
|
||||
value={value}
|
||||
isNewPassword
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
</View>
|
||||
|
@ -90,6 +96,7 @@ const MasterPasswordScreen = ({ navigation }: OnboardingStackScreenProps<'Master
|
|||
name="password_validate"
|
||||
render={({ field: { onBlur, onChange, value } }) => (
|
||||
<PasswordInput
|
||||
testID="master-password-confirm"
|
||||
onChangeText={onChange}
|
||||
onBlur={onBlur}
|
||||
value={value}
|
||||
|
|
|
@ -46,6 +46,7 @@ const NewLibraryScreen = ({ navigation }: OnboardingStackScreenProps<'NewLibrary
|
|||
control={form.control}
|
||||
render={({ field: { onBlur, onChange, value } }) => (
|
||||
<Input
|
||||
testID="library-name"
|
||||
style={tw`my-3`}
|
||||
placeholder='e.g. "James Library"'
|
||||
onBlur={onBlur}
|
||||
|
|
|
@ -4,7 +4,7 @@ import { Animated, FlatList, Text, View } from 'react-native';
|
|||
import { Swipeable } from 'react-native-gesture-handler';
|
||||
import { LibraryConfigWrapped, useBridgeQuery } from '@sd/client';
|
||||
import DeleteLibraryModal from '~/components/modal/confirm-modals/DeleteLibraryModal';
|
||||
import { AnimatedButton } from '~/components/primitive/Button';
|
||||
import { AnimatedButton, FakeButton } from '~/components/primitive/Button';
|
||||
import { tw, twStyle } from '~/lib/tailwind';
|
||||
import { SettingsStackScreenProps } from '~/navigation/SettingsNavigator';
|
||||
|
||||
|
@ -37,9 +37,9 @@ function LibraryItem({
|
|||
<DeleteLibraryModal
|
||||
libraryUuid={library.uuid}
|
||||
trigger={
|
||||
<AnimatedButton style={tw`mx-2`}>
|
||||
<FakeButton style={tw`mx-2`}>
|
||||
<Trash size={18} color="white" />
|
||||
</AnimatedButton>
|
||||
</FakeButton>
|
||||
}
|
||||
/>
|
||||
</Animated.View>
|
||||
|
|
|
@ -6,7 +6,7 @@ import { useBridgeMutation, useLibraryContext } from '@sd/client';
|
|||
import { Input } from '~/components/form/Input';
|
||||
import { Switch } from '~/components/form/Switch';
|
||||
import DeleteLibraryModal from '~/components/modal/confirm-modals/DeleteLibraryModal';
|
||||
import { AnimatedButton } from '~/components/primitive/Button';
|
||||
import { FakeButton } from '~/components/primitive/Button';
|
||||
import { Divider } from '~/components/primitive/Divider';
|
||||
import { SettingsContainer, SettingsInputTitle } from '~/components/settings/SettingsContainer';
|
||||
import { SettingsItem } from '~/components/settings/SettingsItem';
|
||||
|
@ -72,9 +72,9 @@ const LibraryGeneralSettingsScreen = ({
|
|||
<DeleteLibraryModal
|
||||
libraryUuid={library.uuid}
|
||||
trigger={
|
||||
<AnimatedButton size="sm" variant="danger">
|
||||
<FakeButton size="sm" variant="danger">
|
||||
<Trash color={tw.color('ink')} size={20} />
|
||||
</AnimatedButton>
|
||||
</FakeButton>
|
||||
}
|
||||
/>
|
||||
}
|
||||
|
|
26
apps/mobile/tests/onboarding.yml
Normal file
26
apps/mobile/tests/onboarding.yml
Normal file
|
@ -0,0 +1,26 @@
|
|||
appId: com.spacedrive.app
|
||||
---
|
||||
- launchApp:
|
||||
clearState: true
|
||||
- tapOn: 'Get Started'
|
||||
- tapOn:
|
||||
id: 'library-name'
|
||||
- inputText: 'TestLib'
|
||||
- tapOn: 'New Library'
|
||||
- tapOn:
|
||||
id: 'master-password'
|
||||
- inputText: '12345678'
|
||||
- tapOn: 'Set Password'
|
||||
- tapOn:
|
||||
id: 'master-password-confirm'
|
||||
- inputText: '12345678'
|
||||
- tapOn: 'Confirm Password'
|
||||
- tapOn: 'Continue'
|
||||
# Library creation can take a while...
|
||||
- extendedWaitUntil:
|
||||
visible:
|
||||
id: 'drawer-toggle'
|
||||
timeout: 180000 # 3 minutes
|
||||
- tapOn:
|
||||
id: 'drawer-toggle'
|
||||
- assertVisible: 'TestLib'
|
|
@ -1,4 +1,5 @@
|
|||
{
|
||||
"extends": "expo/tsconfig.base",
|
||||
"compilerOptions": {
|
||||
"allowJs": true,
|
||||
"esModuleInterop": true,
|
||||
|
|
140
pnpm-lock.yaml
140
pnpm-lock.yaml
|
@ -183,6 +183,7 @@ importers:
|
|||
|
||||
apps/mobile:
|
||||
specifiers:
|
||||
'@babel/core': ^7.21.0
|
||||
'@gorhom/bottom-sheet': ^4.4.5
|
||||
'@hookform/resolvers': ^2.9.11
|
||||
'@react-native-async-storage/async-storage': ~1.17.11
|
||||
|
@ -205,9 +206,9 @@ importers:
|
|||
class-variance-authority: ^0.4.0
|
||||
dayjs: ^1.11.5
|
||||
eslint-plugin-react-native: ^4.0.0
|
||||
expo: ^48.0.6
|
||||
expo: ~48.0.6
|
||||
expo-linking: ~4.0.1
|
||||
expo-media-library: ~15.2.2
|
||||
expo-media-library: ~15.2.3
|
||||
expo-splash-screen: ~0.18.1
|
||||
expo-status-bar: ~1.4.4
|
||||
intl: ^1.2.5
|
||||
|
@ -254,7 +255,7 @@ importers:
|
|||
dayjs: 1.11.7
|
||||
expo: 48.0.6_@babel+core@7.21.3
|
||||
expo-linking: 4.0.1_expo@48.0.6
|
||||
expo-media-library: 15.2.2_expo@48.0.6
|
||||
expo-media-library: 15.2.3_expo@48.0.6
|
||||
expo-splash-screen: 0.18.1_mjojxfzfqol2n3a5upkwgtvxki
|
||||
expo-status-bar: 1.4.4
|
||||
intl: 1.2.5
|
||||
|
@ -279,6 +280,7 @@ importers:
|
|||
valtio: 1.10.3_react@18.2.0
|
||||
zod: 3.21.4
|
||||
devDependencies:
|
||||
'@babel/core': 7.21.3
|
||||
'@rnx-kit/metro-config': 1.3.5_chpi2hywxvcqr7jb5bivwozu4e
|
||||
'@sd/config': link:../../packages/config
|
||||
'@types/react': 18.0.27
|
||||
|
@ -747,7 +749,7 @@ packages:
|
|||
resolution: {integrity: sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dependencies:
|
||||
'@babel/types': 7.21.2
|
||||
'@babel/types': 7.21.3
|
||||
jsesc: 2.5.2
|
||||
source-map: 0.5.7
|
||||
dev: true
|
||||
|
@ -755,18 +757,9 @@ packages:
|
|||
/@babel/generator/7.20.7:
|
||||
resolution: {integrity: sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dependencies:
|
||||
'@babel/types': 7.21.2
|
||||
'@jridgewell/gen-mapping': 0.3.2
|
||||
jsesc: 2.5.2
|
||||
|
||||
/@babel/generator/7.21.1:
|
||||
resolution: {integrity: sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dependencies:
|
||||
'@babel/types': 7.21.3
|
||||
'@jridgewell/gen-mapping': 0.3.2
|
||||
'@jridgewell/trace-mapping': 0.3.17
|
||||
jsesc: 2.5.2
|
||||
|
||||
/@babel/generator/7.21.3:
|
||||
|
@ -799,8 +792,8 @@ packages:
|
|||
dependencies:
|
||||
'@babel/compat-data': 7.20.10
|
||||
'@babel/core': 7.20.12
|
||||
'@babel/helper-validator-option': 7.18.6
|
||||
browserslist: 4.21.4
|
||||
'@babel/helper-validator-option': 7.21.0
|
||||
browserslist: 4.21.5
|
||||
lru-cache: 5.1.1
|
||||
semver: 6.3.0
|
||||
|
||||
|
@ -812,30 +805,11 @@ packages:
|
|||
dependencies:
|
||||
'@babel/compat-data': 7.20.10
|
||||
'@babel/core': 7.21.3
|
||||
'@babel/helper-validator-option': 7.18.6
|
||||
'@babel/helper-validator-option': 7.21.0
|
||||
browserslist: 4.21.4
|
||||
lru-cache: 5.1.1
|
||||
semver: 6.3.0
|
||||
|
||||
/@babel/helper-create-class-features-plugin/7.20.12_@babel+core@7.21.3:
|
||||
resolution: {integrity: sha512-9OunRkbT0JQcednL0UFvbfXpAsUXiGjUk0a7sN8fUXX7Mue79cUSMjHGDRRi/Vz9vYlpIhLV5fMD5dKoMhhsNQ==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
peerDependencies:
|
||||
'@babel/core': ^7.0.0
|
||||
dependencies:
|
||||
'@babel/core': 7.21.3
|
||||
'@babel/helper-annotate-as-pure': 7.18.6
|
||||
'@babel/helper-environment-visitor': 7.18.9
|
||||
'@babel/helper-function-name': 7.21.0
|
||||
'@babel/helper-member-expression-to-functions': 7.20.7
|
||||
'@babel/helper-optimise-call-expression': 7.18.6
|
||||
'@babel/helper-replace-supers': 7.20.7
|
||||
'@babel/helper-skip-transparent-expression-wrappers': 7.20.0
|
||||
'@babel/helper-split-export-declaration': 7.18.6
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: false
|
||||
|
||||
/@babel/helper-create-class-features-plugin/7.21.0_@babel+core@7.20.12:
|
||||
resolution: {integrity: sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
@ -955,13 +929,6 @@ packages:
|
|||
dependencies:
|
||||
'@babel/types': 7.21.3
|
||||
|
||||
/@babel/helper-member-expression-to-functions/7.20.7:
|
||||
resolution: {integrity: sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dependencies:
|
||||
'@babel/types': 7.21.3
|
||||
dev: false
|
||||
|
||||
/@babel/helper-member-expression-to-functions/7.21.0:
|
||||
resolution: {integrity: sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
@ -984,8 +951,8 @@ packages:
|
|||
'@babel/helper-split-export-declaration': 7.18.6
|
||||
'@babel/helper-validator-identifier': 7.19.1
|
||||
'@babel/template': 7.20.7
|
||||
'@babel/traverse': 7.21.2
|
||||
'@babel/types': 7.21.2
|
||||
'@babel/traverse': 7.21.3
|
||||
'@babel/types': 7.21.3
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
|
@ -1082,10 +1049,6 @@ packages:
|
|||
resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
||||
/@babel/helper-validator-option/7.18.6:
|
||||
resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
||||
/@babel/helper-validator-option/7.21.0:
|
||||
resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
@ -1106,8 +1069,8 @@ packages:
|
|||
engines: {node: '>=6.9.0'}
|
||||
dependencies:
|
||||
'@babel/template': 7.20.7
|
||||
'@babel/traverse': 7.21.2
|
||||
'@babel/types': 7.21.2
|
||||
'@babel/traverse': 7.21.3
|
||||
'@babel/types': 7.21.3
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
|
@ -1134,14 +1097,15 @@ packages:
|
|||
engines: {node: '>=6.0.0'}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
'@babel/types': 7.21.2
|
||||
'@babel/types': 7.21.3
|
||||
|
||||
/@babel/parser/7.21.2:
|
||||
resolution: {integrity: sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==}
|
||||
engines: {node: '>=6.0.0'}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
'@babel/types': 7.21.2
|
||||
'@babel/types': 7.21.3
|
||||
dev: true
|
||||
|
||||
/@babel/parser/7.21.3:
|
||||
resolution: {integrity: sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==}
|
||||
|
@ -1244,7 +1208,7 @@ packages:
|
|||
'@babel/core': ^7.0.0-0
|
||||
dependencies:
|
||||
'@babel/core': 7.21.3
|
||||
'@babel/helper-create-class-features-plugin': 7.20.12_@babel+core@7.21.3
|
||||
'@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.21.3
|
||||
'@babel/helper-plugin-utils': 7.20.2
|
||||
'@babel/helper-replace-supers': 7.20.7
|
||||
'@babel/helper-split-export-declaration': 7.18.6
|
||||
|
@ -2826,13 +2790,13 @@ packages:
|
|||
engines: {node: '>=6.9.0'}
|
||||
dependencies:
|
||||
'@babel/code-frame': 7.18.6
|
||||
'@babel/generator': 7.21.1
|
||||
'@babel/generator': 7.21.3
|
||||
'@babel/helper-environment-visitor': 7.18.9
|
||||
'@babel/helper-function-name': 7.21.0
|
||||
'@babel/helper-hoist-variables': 7.18.6
|
||||
'@babel/helper-split-export-declaration': 7.18.6
|
||||
'@babel/parser': 7.21.2
|
||||
'@babel/types': 7.21.2
|
||||
'@babel/parser': 7.21.3
|
||||
'@babel/types': 7.21.3
|
||||
debug: 4.3.4
|
||||
globals: 11.12.0
|
||||
transitivePeerDependencies:
|
||||
|
@ -2842,28 +2806,11 @@ packages:
|
|||
/@babel/traverse/7.20.12:
|
||||
resolution: {integrity: sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dependencies:
|
||||
'@babel/code-frame': 7.18.6
|
||||
'@babel/generator': 7.21.1
|
||||
'@babel/helper-environment-visitor': 7.18.9
|
||||
'@babel/helper-function-name': 7.19.0
|
||||
'@babel/helper-hoist-variables': 7.18.6
|
||||
'@babel/helper-split-export-declaration': 7.18.6
|
||||
'@babel/parser': 7.21.2
|
||||
'@babel/types': 7.21.2
|
||||
debug: 4.3.4
|
||||
globals: 11.12.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
/@babel/traverse/7.21.2:
|
||||
resolution: {integrity: sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dependencies:
|
||||
'@babel/code-frame': 7.18.6
|
||||
'@babel/generator': 7.21.3
|
||||
'@babel/helper-environment-visitor': 7.18.9
|
||||
'@babel/helper-function-name': 7.21.0
|
||||
'@babel/helper-function-name': 7.19.0
|
||||
'@babel/helper-hoist-variables': 7.18.6
|
||||
'@babel/helper-split-export-declaration': 7.18.6
|
||||
'@babel/parser': 7.21.3
|
||||
|
@ -3675,7 +3622,7 @@ packages:
|
|||
resolution: {integrity: sha512-uhmrXNemXTbCTKP/ycyJHOU/KLGdFwVCrWNBzz1VkwnmL8yJV5F3C18a83ybFFnUNfkGHeH5LtID7CSNbbTWKg==}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
'@babel/runtime': 7.20.7
|
||||
'@babel/runtime': 7.21.0
|
||||
'@expo/code-signing-certificates': 0.0.5
|
||||
'@expo/config': 8.0.2
|
||||
'@expo/config-plugins': 6.0.1
|
||||
|
@ -3698,7 +3645,7 @@ packages:
|
|||
bplist-parser: 0.3.2
|
||||
cacache: 15.3.0
|
||||
chalk: 4.1.2
|
||||
ci-info: 3.7.1
|
||||
ci-info: 3.8.0
|
||||
debug: 4.3.4
|
||||
env-editor: 0.4.2
|
||||
form-data: 3.0.1
|
||||
|
@ -3715,7 +3662,7 @@ packages:
|
|||
md5-file: 3.2.3
|
||||
md5hex: 1.0.0
|
||||
minipass: 3.1.6
|
||||
node-fetch: 2.6.8
|
||||
node-fetch: 2.6.9
|
||||
node-forge: 1.3.1
|
||||
npm-package-arg: 7.0.0
|
||||
ora: 3.4.0
|
||||
|
@ -3821,7 +3768,7 @@ packages:
|
|||
fs-extra: 9.0.0
|
||||
is-docker: 2.2.1
|
||||
is-wsl: 2.2.0
|
||||
node-fetch: 2.6.8
|
||||
node-fetch: 2.6.9
|
||||
open: 8.4.0
|
||||
resolve-from: 5.0.0
|
||||
semver: 7.3.2
|
||||
|
@ -3953,7 +3900,7 @@ packages:
|
|||
'@segment/loosely-validate-event': 2.0.0
|
||||
fetch-retry: 4.1.1
|
||||
md5: 2.3.0
|
||||
node-fetch: 2.6.8
|
||||
node-fetch: 2.6.9
|
||||
remove-trailing-slash: 0.1.1
|
||||
uuid: 8.3.2
|
||||
transitivePeerDependencies:
|
||||
|
@ -6575,7 +6522,7 @@ packages:
|
|||
'@storybook/core-events': 7.0.0-rc.10
|
||||
'@storybook/csf': 0.0.2-next.11
|
||||
'@storybook/csf-tools': 7.0.0-rc.10
|
||||
'@storybook/docs-mdx': 0.0.1-next.6
|
||||
'@storybook/docs-mdx': 0.0.1-next.7
|
||||
'@storybook/global': 5.0.0
|
||||
'@storybook/manager': 7.0.0-rc.10
|
||||
'@storybook/node-logger': 7.0.0-rc.10
|
||||
|
@ -6648,8 +6595,8 @@ packages:
|
|||
type-fest: 2.19.0
|
||||
dev: true
|
||||
|
||||
/@storybook/docs-mdx/0.0.1-next.6:
|
||||
resolution: {integrity: sha512-DjoSIXADmLJtdroXAjUotFiZlcZ2usWhqrS7aeOtZs0DVR0Ws5WQjnwtpDUXt8gryTSd+OZJ0cNsDcqg4JDEvQ==}
|
||||
/@storybook/docs-mdx/0.0.1-next.7:
|
||||
resolution: {integrity: sha512-JbgBf/EMBtx65iXtB3pOiX3818UeL9jZ+KAY241OAPqJVXjMQ5KaVOdg/57MSmd508HDIGx7CiImOMEmWwQ9/g==}
|
||||
dev: true
|
||||
|
||||
/@storybook/docs-tools/7.0.0-rc.10:
|
||||
|
@ -8715,7 +8662,7 @@ packages:
|
|||
dependencies:
|
||||
'@babel/plugin-proposal-decorators': 7.20.7_@babel+core@7.21.3
|
||||
'@babel/plugin-proposal-object-rest-spread': 7.20.7_@babel+core@7.21.3
|
||||
'@babel/plugin-transform-react-jsx': 7.20.7_@babel+core@7.21.3
|
||||
'@babel/plugin-transform-react-jsx': 7.21.0_@babel+core@7.21.3
|
||||
'@babel/preset-env': 7.20.2_@babel+core@7.21.3
|
||||
babel-plugin-module-resolver: 4.1.0
|
||||
babel-plugin-react-native-web: 0.18.10
|
||||
|
@ -9020,8 +8967,8 @@ packages:
|
|||
hasBin: true
|
||||
dependencies:
|
||||
caniuse-lite: 1.0.30001472
|
||||
electron-to-chromium: 1.4.342
|
||||
node-releases: 2.0.10
|
||||
electron-to-chromium: 1.4.284
|
||||
node-releases: 2.0.8
|
||||
update-browserslist-db: 1.0.10_browserslist@4.21.5
|
||||
|
||||
/bser/2.1.1:
|
||||
|
@ -9289,11 +9236,6 @@ packages:
|
|||
/ci-info/2.0.0:
|
||||
resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==}
|
||||
|
||||
/ci-info/3.7.1:
|
||||
resolution: {integrity: sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==}
|
||||
engines: {node: '>=8'}
|
||||
dev: false
|
||||
|
||||
/ci-info/3.8.0:
|
||||
resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==}
|
||||
engines: {node: '>=8'}
|
||||
|
@ -10341,9 +10283,6 @@ packages:
|
|||
/electron-to-chromium/1.4.284:
|
||||
resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==}
|
||||
|
||||
/electron-to-chromium/1.4.342:
|
||||
resolution: {integrity: sha512-dTei3VResi5bINDENswBxhL+N0Mw5YnfWyTqO75KGsVldurEkhC9+CelJVAse8jycWyP8pv3VSj4BSyP8wTWJA==}
|
||||
|
||||
/electron/11.5.0:
|
||||
resolution: {integrity: sha512-WjNDd6lGpxyiNjE3LhnFCAk/D9GIj1rU3GSDealVShhkkkPR3Vh4q8ErXGDl1OAO/faomVa10KoFPUN/pLbNxg==}
|
||||
engines: {node: '>= 8.6'}
|
||||
|
@ -11032,8 +10971,8 @@ packages:
|
|||
- supports-color
|
||||
dev: false
|
||||
|
||||
/expo-media-library/15.2.2_expo@48.0.6:
|
||||
resolution: {integrity: sha512-GebBavV9H+m0Qzoy4G7++BWmwUcddLnCee1qGYkCyHT6CvuLNhXUgC3FV9NINEwlii3HGAuCzk1auaEY60SGDA==}
|
||||
/expo-media-library/15.2.3_expo@48.0.6:
|
||||
resolution: {integrity: sha512-Oz8b8Xsvfj7YcutUBtI84NUIqSnt7iCM5HZ5DyKoWKKiDK/+aUuj3RXNQELG8jUw6pQPgEwgbZ1+J8SdH/y9jw==}
|
||||
peerDependencies:
|
||||
expo: '*'
|
||||
dependencies:
|
||||
|
@ -11080,7 +11019,7 @@ packages:
|
|||
resolution: {integrity: sha512-ylm91v/xYjBBEqFHH+mpNyGijJgFXx4NwgKgHCIEfcAQyTZLXpGCL6teOVzAmHCCVF7EdalLl3If/+n09jOi4g==}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
'@babel/runtime': 7.20.7
|
||||
'@babel/runtime': 7.21.0
|
||||
'@expo/cli': 0.6.2_6weo4dzsrefthwodkc5gdxxcii
|
||||
'@expo/config': 8.0.2
|
||||
'@expo/config-plugins': 6.0.1
|
||||
|
@ -11099,7 +11038,7 @@ packages:
|
|||
getenv: 1.0.0
|
||||
invariant: 2.2.4
|
||||
md5-file: 3.2.3
|
||||
node-fetch: 2.6.8
|
||||
node-fetch: 2.6.9
|
||||
pretty-format: 26.6.2
|
||||
uuid: 3.4.0
|
||||
transitivePeerDependencies:
|
||||
|
@ -14098,8 +14037,8 @@ packages:
|
|||
/metro-source-map/0.73.7:
|
||||
resolution: {integrity: sha512-gbC/lfUN52TtQhEsTTA+987MaFUpQlufuCI05blLGLosDcFCsARikHsxa65Gtslm/rG2MqvFLiPA5hviONNv9g==}
|
||||
dependencies:
|
||||
'@babel/traverse': 7.21.2
|
||||
'@babel/types': 7.21.2
|
||||
'@babel/traverse': 7.21.3
|
||||
'@babel/types': 7.21.3
|
||||
invariant: 2.2.4
|
||||
metro-symbolicate: 0.73.7
|
||||
nullthrows: 1.1.1
|
||||
|
@ -14700,9 +14639,6 @@ packages:
|
|||
/node-int64/0.4.0:
|
||||
resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
|
||||
|
||||
/node-releases/2.0.10:
|
||||
resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==}
|
||||
|
||||
/node-releases/2.0.8:
|
||||
resolution: {integrity: sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==}
|
||||
|
||||
|
|
Loading…
Reference in a new issue