0) {
+ println "android.packagingOptions.$prop += $options ($options.length)"
+ // Ex: android.packagingOptions.pickFirsts += '**/SCCS/**'
+ options.each {
+ android.packagingOptions[prop] += it
+ }
+ }
+}
+
+dependencies {
+ // The version of react-native is set by the React Native Gradle Plugin
+ implementation("com.facebook.react:react-android")
+
+ def isGifEnabled = (findProperty('expo.gif.enabled') ?: "") == "true";
+ def isWebpEnabled = (findProperty('expo.webp.enabled') ?: "") == "true";
+ def isWebpAnimatedEnabled = (findProperty('expo.webp.animated') ?: "") == "true";
+ def frescoVersion = rootProject.ext.frescoVersion
+
+ // If your app supports Android versions before Ice Cream Sandwich (API level 14)
+ if (isGifEnabled || isWebpEnabled) {
+ implementation("com.facebook.fresco:fresco:${frescoVersion}")
+ implementation("com.facebook.fresco:imagepipeline-okhttp3:${frescoVersion}")
+ }
+
+ if (isGifEnabled) {
+ // For animated gif support
+ implementation("com.facebook.fresco:animated-gif:${frescoVersion}")
+ }
+
+ if (isWebpEnabled) {
+ // For webp support
+ implementation("com.facebook.fresco:webpsupport:${frescoVersion}")
+ if (isWebpAnimatedEnabled) {
+ // Animated webp support
+ implementation("com.facebook.fresco:animated-webp:${frescoVersion}")
+ }
+ }
+
+ debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}")
+ debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") {
+ exclude group:'com.squareup.okhttp3', module:'okhttp'
+ }
+ debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}")
+
+ if (hermesEnabled.toBoolean()) {
+ implementation("com.facebook.react:hermes-android")
+ } else {
+ implementation jscFlavor
+ }
+}
+
+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)
diff --git a/apps/tests/android/app/debug.keystore b/apps/tests/android/app/debug.keystore
new file mode 100644
index 000000000..364e105ed
Binary files /dev/null and b/apps/tests/android/app/debug.keystore differ
diff --git a/apps/tests/android/app/proguard-rules.pro b/apps/tests/android/app/proguard-rules.pro
new file mode 100644
index 000000000..551eb41da
--- /dev/null
+++ b/apps/tests/android/app/proguard-rules.pro
@@ -0,0 +1,14 @@
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the proguardFiles
+# directive in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# react-native-reanimated
+-keep class com.swmansion.reanimated.** { *; }
+-keep class com.facebook.react.turbomodule.** { *; }
+
+# Add any project specific keep options here:
diff --git a/apps/tests/android/app/src/debug/AndroidManifest.xml b/apps/tests/android/app/src/debug/AndroidManifest.xml
new file mode 100644
index 000000000..3ec2507ba
--- /dev/null
+++ b/apps/tests/android/app/src/debug/AndroidManifest.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
diff --git a/apps/tests/android/app/src/debug/java/com/reactnativequicksqlite/tests/ReactNativeFlipper.java b/apps/tests/android/app/src/debug/java/com/reactnativequicksqlite/tests/ReactNativeFlipper.java
new file mode 100644
index 000000000..ee16b44a9
--- /dev/null
+++ b/apps/tests/android/app/src/debug/java/com/reactnativequicksqlite/tests/ReactNativeFlipper.java
@@ -0,0 +1,75 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and 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.reactnativequicksqlite.tests;
+
+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.sharedpreferences.SharedPreferencesFlipperPlugin;
+import com.facebook.react.ReactInstanceEventListener;
+import com.facebook.react.ReactInstanceManager;
+import com.facebook.react.bridge.ReactContext;
+import com.facebook.react.modules.network.NetworkingModule;
+import okhttp3.OkHttpClient;
+
+/**
+ * Class responsible of loading Flipper inside your React Native application. This is the debug
+ * flavor of it. Here you can add your own plugins and customize the Flipper setup.
+ */
+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 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 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/apps/tests/android/app/src/main/AndroidManifest.xml b/apps/tests/android/app/src/main/AndroidManifest.xml
new file mode 100644
index 000000000..780ebed1f
--- /dev/null
+++ b/apps/tests/android/app/src/main/AndroidManifest.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/tests/android/app/src/main/java/com/reactnativequicksqlite/tests/MainActivity.java b/apps/tests/android/app/src/main/java/com/reactnativequicksqlite/tests/MainActivity.java
new file mode 100644
index 000000000..2d022f40c
--- /dev/null
+++ b/apps/tests/android/app/src/main/java/com/reactnativequicksqlite/tests/MainActivity.java
@@ -0,0 +1,65 @@
+package com.reactnativequicksqlite.tests;
+
+import android.os.Build;
+import android.os.Bundle;
+
+import com.facebook.react.ReactActivity;
+import com.facebook.react.ReactActivityDelegate;
+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint;
+import com.facebook.react.defaults.DefaultReactActivityDelegate;
+
+import expo.modules.ReactActivityDelegateWrapper;
+
+public class MainActivity extends ReactActivity {
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ // Set the theme to AppTheme BEFORE onCreate to support
+ // coloring the background, status bar, and navigation bar.
+ // This is required for expo-splash-screen.
+ setTheme(R.style.AppTheme);
+ super.onCreate(null);
+ }
+
+ /**
+ * Returns the name of the main component registered from JavaScript.
+ * This is used to schedule rendering of the component.
+ */
+ @Override
+ protected String getMainComponentName() {
+ return "main";
+ }
+
+ /**
+ * Returns the instance of the {@link ReactActivityDelegate}. Here we use a util class {@link
+ * DefaultReactActivityDelegate} which allows you to easily enable Fabric and Concurrent React
+ * (aka React 18) with two boolean flags.
+ */
+ @Override
+ protected ReactActivityDelegate createReactActivityDelegate() {
+ return new ReactActivityDelegateWrapper(this, BuildConfig.IS_NEW_ARCHITECTURE_ENABLED, new DefaultReactActivityDelegate(
+ this,
+ getMainComponentName(),
+ // If you opted-in for the New Architecture, we enable the Fabric Renderer.
+ DefaultNewArchitectureEntryPoint.getFabricEnabled()));
+ }
+
+ /**
+ * Align the back button behavior with Android S
+ * where moving root activities to background instead of finishing activities.
+ * @see onBackPressed
+ */
+ @Override
+ public void invokeDefaultOnBackPressed() {
+ if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.R) {
+ if (!moveTaskToBack(false)) {
+ // For non-root activities, use the default implementation to finish them.
+ super.invokeDefaultOnBackPressed();
+ }
+ return;
+ }
+
+ // Use the default back button implementation on Android S
+ // because it's doing more than {@link Activity#moveTaskToBack} in fact.
+ super.invokeDefaultOnBackPressed();
+ }
+}
diff --git a/apps/tests/android/app/src/main/java/com/reactnativequicksqlite/tests/MainApplication.java b/apps/tests/android/app/src/main/java/com/reactnativequicksqlite/tests/MainApplication.java
new file mode 100644
index 000000000..09c91e305
--- /dev/null
+++ b/apps/tests/android/app/src/main/java/com/reactnativequicksqlite/tests/MainApplication.java
@@ -0,0 +1,80 @@
+package com.reactnativequicksqlite.tests;
+
+import android.app.Application;
+import android.content.res.Configuration;
+import androidx.annotation.NonNull;
+
+import com.facebook.react.PackageList;
+import com.facebook.react.ReactApplication;
+import com.facebook.react.ReactNativeHost;
+import com.facebook.react.ReactPackage;
+import com.facebook.react.config.ReactFeatureFlags;
+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint;
+import com.facebook.react.defaults.DefaultReactNativeHost;
+import com.facebook.soloader.SoLoader;
+
+import expo.modules.ApplicationLifecycleDispatcher;
+import expo.modules.ReactNativeHostWrapper;
+
+import java.util.List;
+
+public class MainApplication extends Application implements ReactApplication {
+
+ private final ReactNativeHost mReactNativeHost =
+ new ReactNativeHostWrapper(this, new DefaultReactNativeHost(this) {
+ @Override
+ public boolean getUseDeveloperSupport() {
+ return BuildConfig.DEBUG;
+ }
+
+ @Override
+ protected List getPackages() {
+ @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 ".expo/.virtual-metro-entry";
+ }
+
+ @Override
+ protected boolean isNewArchEnabled() {
+ return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;
+ }
+
+ @Override
+ protected Boolean isHermesEnabled() {
+ return BuildConfig.IS_HERMES_ENABLED;
+ }
+ });
+
+ @Override
+ public ReactNativeHost getReactNativeHost() {
+ return mReactNativeHost;
+ }
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ SoLoader.init(this, /* native exopackage */ false);
+ if (!BuildConfig.REACT_NATIVE_UNSTABLE_USE_RUNTIME_SCHEDULER_ALWAYS) {
+ ReactFeatureFlags.unstable_useRuntimeSchedulerAlways = false;
+ }
+ if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
+ // If you opted-in for the New Architecture, we load the native entry point for this app.
+ DefaultNewArchitectureEntryPoint.load();
+ }
+ ReactNativeFlipper.initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
+ ApplicationLifecycleDispatcher.onApplicationCreate(this);
+ }
+
+ @Override
+ public void onConfigurationChanged(@NonNull Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ ApplicationLifecycleDispatcher.onConfigurationChanged(this, newConfig);
+ }
+}
diff --git a/apps/tests/android/app/src/main/res/drawable-hdpi/splashscreen_image.png b/apps/tests/android/app/src/main/res/drawable-hdpi/splashscreen_image.png
new file mode 100644
index 000000000..c52c2c680
Binary files /dev/null and b/apps/tests/android/app/src/main/res/drawable-hdpi/splashscreen_image.png differ
diff --git a/apps/tests/android/app/src/main/res/drawable-mdpi/splashscreen_image.png b/apps/tests/android/app/src/main/res/drawable-mdpi/splashscreen_image.png
new file mode 100644
index 000000000..c52c2c680
Binary files /dev/null and b/apps/tests/android/app/src/main/res/drawable-mdpi/splashscreen_image.png differ
diff --git a/apps/tests/android/app/src/main/res/drawable-xhdpi/splashscreen_image.png b/apps/tests/android/app/src/main/res/drawable-xhdpi/splashscreen_image.png
new file mode 100644
index 000000000..c52c2c680
Binary files /dev/null and b/apps/tests/android/app/src/main/res/drawable-xhdpi/splashscreen_image.png differ
diff --git a/apps/tests/android/app/src/main/res/drawable-xxhdpi/splashscreen_image.png b/apps/tests/android/app/src/main/res/drawable-xxhdpi/splashscreen_image.png
new file mode 100644
index 000000000..c52c2c680
Binary files /dev/null and b/apps/tests/android/app/src/main/res/drawable-xxhdpi/splashscreen_image.png differ
diff --git a/apps/tests/android/app/src/main/res/drawable-xxxhdpi/splashscreen_image.png b/apps/tests/android/app/src/main/res/drawable-xxxhdpi/splashscreen_image.png
new file mode 100644
index 000000000..c52c2c680
Binary files /dev/null and b/apps/tests/android/app/src/main/res/drawable-xxxhdpi/splashscreen_image.png differ
diff --git a/apps/tests/android/app/src/main/res/drawable/rn_edit_text_material.xml b/apps/tests/android/app/src/main/res/drawable/rn_edit_text_material.xml
new file mode 100644
index 000000000..73b37e4d9
--- /dev/null
+++ b/apps/tests/android/app/src/main/res/drawable/rn_edit_text_material.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/tests/android/app/src/main/res/drawable/splashscreen.xml b/apps/tests/android/app/src/main/res/drawable/splashscreen.xml
new file mode 100644
index 000000000..c8568e162
--- /dev/null
+++ b/apps/tests/android/app/src/main/res/drawable/splashscreen.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/apps/tests/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/apps/tests/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 000000000..3941bea9b
--- /dev/null
+++ b/apps/tests/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/tests/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/apps/tests/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 000000000..3941bea9b
--- /dev/null
+++ b/apps/tests/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/tests/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/apps/tests/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..0a61c1b27
Binary files /dev/null and b/apps/tests/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/apps/tests/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/apps/tests/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
new file mode 100644
index 000000000..ac03dbf69
Binary files /dev/null and b/apps/tests/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png differ
diff --git a/apps/tests/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/apps/tests/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 000000000..26deb9725
Binary files /dev/null and b/apps/tests/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ
diff --git a/apps/tests/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/apps/tests/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..fd1a2c712
Binary files /dev/null and b/apps/tests/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/apps/tests/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/apps/tests/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
new file mode 100644
index 000000000..e1173a94d
Binary files /dev/null and b/apps/tests/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png differ
diff --git a/apps/tests/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/apps/tests/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 000000000..4d3ac7a4e
Binary files /dev/null and b/apps/tests/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ
diff --git a/apps/tests/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/apps/tests/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..d57caa303
Binary files /dev/null and b/apps/tests/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/apps/tests/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/apps/tests/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
new file mode 100644
index 000000000..ff086fdc3
Binary files /dev/null and b/apps/tests/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png differ
diff --git a/apps/tests/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/apps/tests/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 000000000..95ac5824e
Binary files /dev/null and b/apps/tests/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ
diff --git a/apps/tests/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/apps/tests/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..0a07e73ac
Binary files /dev/null and b/apps/tests/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/apps/tests/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/apps/tests/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
new file mode 100644
index 000000000..f7f1d0690
Binary files /dev/null and b/apps/tests/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png differ
diff --git a/apps/tests/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/apps/tests/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 000000000..6508f7420
Binary files /dev/null and b/apps/tests/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ
diff --git a/apps/tests/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/apps/tests/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..499e372bd
Binary files /dev/null and b/apps/tests/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/apps/tests/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/apps/tests/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
new file mode 100644
index 000000000..49a464ee3
Binary files /dev/null and b/apps/tests/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png differ
diff --git a/apps/tests/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/apps/tests/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 000000000..d54716bfa
Binary files /dev/null and b/apps/tests/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ
diff --git a/apps/tests/android/app/src/main/res/values-night/colors.xml b/apps/tests/android/app/src/main/res/values-night/colors.xml
new file mode 100644
index 000000000..3c05de5be
--- /dev/null
+++ b/apps/tests/android/app/src/main/res/values-night/colors.xml
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/tests/android/app/src/main/res/values/colors.xml b/apps/tests/android/app/src/main/res/values/colors.xml
new file mode 100644
index 000000000..f387b9011
--- /dev/null
+++ b/apps/tests/android/app/src/main/res/values/colors.xml
@@ -0,0 +1,6 @@
+
+ #ffffff
+ #ffffff
+ #023c69
+ #ffffff
+
\ No newline at end of file
diff --git a/apps/tests/android/app/src/main/res/values/strings.xml b/apps/tests/android/app/src/main/res/values/strings.xml
new file mode 100644
index 000000000..0d30d6fa6
--- /dev/null
+++ b/apps/tests/android/app/src/main/res/values/strings.xml
@@ -0,0 +1,5 @@
+
+ tests
+ contain
+ false
+
\ No newline at end of file
diff --git a/apps/tests/android/app/src/main/res/values/styles.xml b/apps/tests/android/app/src/main/res/values/styles.xml
new file mode 100644
index 000000000..f03e23f85
--- /dev/null
+++ b/apps/tests/android/app/src/main/res/values/styles.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/tests/android/app/src/release/java/com/reactnativequicksqlite/tests/ReactNativeFlipper.java b/apps/tests/android/app/src/release/java/com/reactnativequicksqlite/tests/ReactNativeFlipper.java
new file mode 100644
index 000000000..fd35fab9a
--- /dev/null
+++ b/apps/tests/android/app/src/release/java/com/reactnativequicksqlite/tests/ReactNativeFlipper.java
@@ -0,0 +1,20 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and 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.reactnativequicksqlite.tests;
+
+import android.content.Context;
+import com.facebook.react.ReactInstanceManager;
+
+/**
+ * Class responsible of loading Flipper inside your React Native application. This is the release
+ * flavor of it so it's empty as we don't want to load Flipper.
+ */
+public class ReactNativeFlipper {
+ public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {
+ // Do nothing as we don't want to initialize Flipper on Release.
+ }
+}
diff --git a/apps/tests/android/build.gradle b/apps/tests/android/build.gradle
new file mode 100644
index 000000000..bf861dbf3
--- /dev/null
+++ b/apps/tests/android/build.gradle
@@ -0,0 +1,40 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+
+buildscript {
+ ext {
+ buildToolsVersion = findProperty('android.buildToolsVersion') ?: '33.0.0'
+ minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '21')
+ compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '33')
+ targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '33')
+ kotlinVersion = findProperty('android.kotlinVersion') ?: '1.8.10'
+ frescoVersion = findProperty('expo.frescoVersion') ?: '2.5.0'
+
+ // We use NDK 23 which has both M1 support and is the side-by-side NDK version from AGP.
+ ndkVersion = "23.1.7779620"
+ }
+ repositories {
+ google()
+ mavenCentral()
+ }
+ dependencies {
+ classpath('com.android.tools.build:gradle:7.4.2')
+ classpath('com.facebook.react:react-native-gradle-plugin')
+ }
+}
+
+allprojects {
+ repositories {
+ 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'))
+ }
+ maven {
+ // Android JSC is installed from npm
+ url(new File(['node', '--print', "require.resolve('jsc-android/package.json')"].execute(null, rootDir).text.trim(), '../dist'))
+ }
+
+ google()
+ mavenCentral()
+ maven { url 'https://www.jitpack.io' }
+ }
+}
diff --git a/apps/tests/android/gradle.properties b/apps/tests/android/gradle.properties
new file mode 100644
index 000000000..240ca06cb
--- /dev/null
+++ b/apps/tests/android/gradle.properties
@@ -0,0 +1,56 @@
+# Project-wide Gradle settings.
+
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m
+org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m
+
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# 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
+
+# Automatically convert third-party libraries to use AndroidX
+android.enableJetifier=true
+
+# Version of flipper SDK to use with React Native
+FLIPPER_VERSION=0.182.0
+
+# Use this property to specify which architecture you want to build.
+# You can also override it from the CLI using
+# ./gradlew -PreactNativeArchitectures=x86_64
+reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64
+
+# Use this property to enable support to the new architecture.
+# This will allow you to use TurboModules and the Fabric render in
+# your application. You should enable this flag either if you want
+# to write custom TurboModules/Fabric components OR use libraries that
+# are providing them.
+newArchEnabled=false
+
+# Use this property to enable or disable the Hermes JS engine.
+# If set to false, you will be using JSC instead.
+hermesEnabled=true
+
+# Enable GIF support in React Native images (~200 B increase)
+expo.gif.enabled=true
+# Enable webp support in React Native images (~85 KB increase)
+expo.webp.enabled=true
+# Enable animated webp support (~3.4 MB increase)
+# Disabled by default because iOS doesn't support animated webp
+expo.webp.animated=false
+
+# Enable network inspector
+EX_DEV_CLIENT_NETWORK_INSPECTOR=true
diff --git a/apps/tests/android/gradle/wrapper/gradle-wrapper.jar b/apps/tests/android/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 000000000..249e5832f
Binary files /dev/null and b/apps/tests/android/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/apps/tests/android/gradle/wrapper/gradle-wrapper.properties b/apps/tests/android/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 000000000..6ec1567a0
--- /dev/null
+++ b/apps/tests/android/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.1-all.zip
+networkTimeout=10000
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/apps/tests/android/gradlew b/apps/tests/android/gradlew
new file mode 100755
index 000000000..a69d9cb6c
--- /dev/null
+++ b/apps/tests/android/gradlew
@@ -0,0 +1,240 @@
+#!/bin/sh
+
+#
+# Copyright © 2015-2021 the original 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.
+#
+
+##############################################################################
+#
+# Gradle start up script for POSIX generated by Gradle.
+#
+# Important for running:
+#
+# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+# noncompliant, but you have some other compliant shell such as ksh or
+# bash, then to run this script, type that shell name before the whole
+# command line, like:
+#
+# ksh Gradle
+#
+# Busybox and similar reduced shells will NOT work, because this script
+# requires all of these POSIX shell features:
+# * functions;
+# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+# * compound commands having a testable exit status, especially «case»;
+# * various built-in commands including «command», «set», and «ulimit».
+#
+# Important for patching:
+#
+# (2) This script targets any POSIX shell, so it avoids extensions provided
+# by Bash, Ksh, etc; in particular arrays are avoided.
+#
+# The "traditional" practice of packing multiple parameters into a
+# space-separated string is a well documented source of bugs and security
+# problems, so this is (mostly) avoided, by progressively accumulating
+# options in "$@", and eventually passing that to Java.
+#
+# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+# see the in-line comments for details.
+#
+# There are tweaks for specific operating systems such as AIX, CygWin,
+# Darwin, MinGW, and NonStop.
+#
+# (3) This script is generated from the Groovy template
+# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# within the Gradle project.
+#
+# You can find Gradle at https://github.com/gradle/gradle/.
+#
+##############################################################################
+
+# Attempt to set APP_HOME
+
+# Resolve links: $0 may be a link
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+ APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
+ [ -h "$app_path" ]
+do
+ ls=$( ls -ld "$app_path" )
+ link=${ls#*' -> '}
+ case $link in #(
+ /*) app_path=$link ;; #(
+ *) app_path=$APP_HOME$link ;;
+ esac
+done
+
+APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
+
+APP_NAME="Gradle"
+APP_BASE_NAME=${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 "$*"
+} >&2
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+} >&2
+
+# 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 ;; #(
+ MSYS* | MINGW* ) msys=true ;; #(
+ NONSTOP* ) nonstop=true ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD=$JAVA_HOME/jre/sh/java
+ else
+ JAVACMD=$JAVA_HOME/bin/java
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD=java
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+ case $MAX_FD in #(
+ max*)
+ MAX_FD=$( ulimit -H -n ) ||
+ warn "Could not query maximum file descriptor limit"
+ esac
+ case $MAX_FD in #(
+ '' | soft) :;; #(
+ *)
+ ulimit -n "$MAX_FD" ||
+ warn "Could not set maximum file descriptor limit to $MAX_FD"
+ esac
+fi
+
+# Collect all arguments for the java command, stacking in reverse order:
+# * args from the command line
+# * the main class name
+# * -classpath
+# * -D...appname settings
+# * --module-path (only if needed)
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+ APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+ CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+ JAVACMD=$( cygpath --unix "$JAVACMD" )
+
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ for arg do
+ if
+ case $arg in #(
+ -*) false ;; # don't mess with options #(
+ /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
+ [ -e "$t" ] ;; #(
+ *) false ;;
+ esac
+ then
+ arg=$( cygpath --path --ignore --mixed "$arg" )
+ fi
+ # Roll the args list around exactly as many times as the number of
+ # args, so each arg winds up back in the position where it started, but
+ # possibly modified.
+ #
+ # NB: a `for` loop captures its iteration list before it begins, so
+ # changing the positional parameters here affects neither the number of
+ # iterations, nor the values presented in `arg`.
+ shift # remove old arg
+ set -- "$@" "$arg" # push replacement arg
+ done
+fi
+
+# Collect all arguments for the java command;
+# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
+# shell script including quotes and variable substitutions, so put them in
+# double quotes to make sure that they get re-expanded; and
+# * put everything else in single quotes, so that it's not re-expanded.
+
+set -- \
+ "-Dorg.gradle.appname=$APP_BASE_NAME" \
+ -classpath "$CLASSPATH" \
+ org.gradle.wrapper.GradleWrapperMain \
+ "$@"
+
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+ die "xargs is not available"
+fi
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+# set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+ printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+ xargs -n1 |
+ sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+ tr '\n' ' '
+ )" '"$@"'
+
+exec "$JAVACMD" "$@"
diff --git a/apps/tests/android/gradlew.bat b/apps/tests/android/gradlew.bat
new file mode 100644
index 000000000..53a6b238d
--- /dev/null
+++ b/apps/tests/android/gradlew.bat
@@ -0,0 +1,91 @@
+@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% equ 0 goto execute
+
+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 execute
+
+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
+
+: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 %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if %ERRORLEVEL% equ 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!
+set EXIT_CODE=%ERRORLEVEL%
+if %EXIT_CODE% equ 0 set EXIT_CODE=1
+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
+exit /b %EXIT_CODE%
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/apps/tests/android/settings.gradle b/apps/tests/android/settings.gradle
new file mode 100644
index 000000000..28754bb05
--- /dev/null
+++ b/apps/tests/android/settings.gradle
@@ -0,0 +1,10 @@
+rootProject.name = 'tests'
+
+apply from: new File(["node", "--print", "require.resolve('expo/package.json')"].execute(null, rootDir).text.trim(), "../scripts/autolinking.gradle");
+useExpoModules()
+
+apply from: new File(["node", "--print", "require.resolve('@react-native-community/cli-platform-android/package.json')"].execute(null, rootDir).text.trim(), "../native_modules.gradle");
+applyNativeModulesSettingsGradle(settings)
+
+include ':app'
+includeBuild(new File(["node", "--print", "require.resolve('@react-native/gradle-plugin/package.json')"].execute(null, rootDir).text.trim()).getParentFile())
diff --git a/apps/tests/app.json b/apps/tests/app.json
new file mode 100644
index 000000000..200f2c173
--- /dev/null
+++ b/apps/tests/app.json
@@ -0,0 +1,30 @@
+{
+ "expo": {
+ "name": "tests",
+ "slug": "tests",
+ "version": "1.0.0",
+ "orientation": "portrait",
+ "icon": "./assets/icon.png",
+ "userInterfaceStyle": "light",
+ "splash": {
+ "image": "./assets/splash.png",
+ "resizeMode": "contain",
+ "backgroundColor": "#ffffff"
+ },
+ "assetBundlePatterns": ["**/*"],
+ "ios": {
+ "supportsTablet": true,
+ "bundleIdentifier": "com.reactnativequicksqlite.tests"
+ },
+ "android": {
+ "adaptiveIcon": {
+ "foregroundImage": "./assets/adaptive-icon.png",
+ "backgroundColor": "#ffffff"
+ },
+ "package": "com.reactnativequicksqlite.tests"
+ },
+ "web": {
+ "favicon": "./assets/favicon.png"
+ }
+ }
+}
diff --git a/apps/tests/assets/adaptive-icon.png b/apps/tests/assets/adaptive-icon.png
new file mode 100644
index 000000000..03d6f6b6c
Binary files /dev/null and b/apps/tests/assets/adaptive-icon.png differ
diff --git a/apps/tests/assets/favicon.png b/apps/tests/assets/favicon.png
new file mode 100644
index 000000000..e75f697b1
Binary files /dev/null and b/apps/tests/assets/favicon.png differ
diff --git a/apps/tests/assets/icon.png b/apps/tests/assets/icon.png
new file mode 100644
index 000000000..a0b1526fc
Binary files /dev/null and b/apps/tests/assets/icon.png differ
diff --git a/apps/tests/assets/splash.png b/apps/tests/assets/splash.png
new file mode 100644
index 000000000..0e89705a9
Binary files /dev/null and b/apps/tests/assets/splash.png differ
diff --git a/apps/tests/babel.config.js b/apps/tests/babel.config.js
new file mode 100644
index 000000000..79f2d844e
--- /dev/null
+++ b/apps/tests/babel.config.js
@@ -0,0 +1,18 @@
+module.exports = function (api) {
+ api.cache(true);
+ return {
+ presets: ['babel-preset-expo'],
+ plugins: [
+ 'nativewind/babel',
+ '@babel/plugin-transform-async-generator-functions',
+ [
+ 'module-resolver',
+ {
+ alias: {
+ stream: 'stream-browserify'
+ }
+ }
+ ]
+ ]
+ };
+};
diff --git a/apps/tests/index.js b/apps/tests/index.js
new file mode 100644
index 000000000..df625b413
--- /dev/null
+++ b/apps/tests/index.js
@@ -0,0 +1,14 @@
+import App from './App';
+import { registerRootComponent } from 'expo';
+import { Buffer } from '@craftzdog/react-native-buffer';
+
+global.Buffer = Buffer;
+global.process.cwd = () => 'sxsx';
+global.process.env = { NODE_ENV: 'production' };
+global.location = {};
+
+// registerRootComponent calls AppRegistry.registerComponent('main', () => App);
+// It also ensures that whether you load the app in Expo Go or in a native build,
+// the environment is set up appropriately
+
+registerRootComponent(App);
diff --git a/apps/tests/ios/.gitignore b/apps/tests/ios/.gitignore
new file mode 100644
index 000000000..8beb34430
--- /dev/null
+++ b/apps/tests/ios/.gitignore
@@ -0,0 +1,30 @@
+# 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
+.xcode.env.local
+
+# Bundle artifacts
+*.jsbundle
+
+# CocoaPods
+/Pods/
diff --git a/apps/tests/ios/.xcode.env b/apps/tests/ios/.xcode.env
new file mode 100644
index 000000000..3d5782c71
--- /dev/null
+++ b/apps/tests/ios/.xcode.env
@@ -0,0 +1,11 @@
+# This `.xcode.env` file is versioned and is used to source the environment
+# used when running script phases inside Xcode.
+# To customize your local environment, you can create an `.xcode.env.local`
+# file that is not versioned.
+
+# NODE_BINARY variable contains the PATH to the node executable.
+#
+# Customize the NODE_BINARY variable here.
+# For example, to use nvm with brew, add the following line
+# . "$(brew --prefix nvm)/nvm.sh" --no-use
+export NODE_BINARY=$(command -v node)
diff --git a/apps/tests/ios/Podfile b/apps/tests/ios/Podfile
new file mode 100644
index 000000000..8087dfe18
--- /dev/null
+++ b/apps/tests/ios/Podfile
@@ -0,0 +1,87 @@
+require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking")
+require File.join(File.dirname(`node --print "require.resolve('react-native/package.json')"`), "scripts/react_native_pods")
+
+require 'json'
+podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}
+
+ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'
+ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']
+
+platform :ios, podfile_properties['ios.deploymentTarget'] || '13.0'
+install! 'cocoapods',
+ :deterministic_uuids => false
+
+prepare_react_native_project!
+
+# If you are using a `react-native-flipper` your iOS build will fail when `NO_FLIPPER=1` is set.
+# because `react-native-flipper` depends on (FlipperKit,...), which will be excluded. To fix this,
+# you can also exclude `react-native-flipper` in `react-native.config.js`
+#
+# ```js
+# module.exports = {
+# dependencies: {
+# ...(process.env.NO_FLIPPER ? { 'react-native-flipper': { platforms: { ios: null } } } : {}),
+# }
+# }
+# ```
+flipper_config = FlipperConfiguration.disabled
+if ENV['NO_FLIPPER'] == '1' then
+ # Explicitly disabled through environment variables
+ flipper_config = FlipperConfiguration.disabled
+elsif podfile_properties.key?('ios.flipper') then
+ # Configure Flipper in Podfile.properties.json
+ if podfile_properties['ios.flipper'] == 'true' then
+ flipper_config = FlipperConfiguration.enabled(["Debug", "Release"])
+ elsif podfile_properties['ios.flipper'] != 'false' then
+ flipper_config = FlipperConfiguration.enabled(["Debug", "Release"], { 'Flipper' => podfile_properties['ios.flipper'] })
+ end
+end
+
+target 'tests' do
+ use_expo_modules!
+ config = use_native_modules!
+
+ use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks']
+ use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS']
+
+ # Flags change depending on the env values.
+ flags = get_default_flags()
+
+ use_react_native!(
+ :path => config[:reactNativePath],
+ :hermes_enabled => podfile_properties['expo.jsEngine'] == nil || podfile_properties['expo.jsEngine'] == 'hermes',
+ :fabric_enabled => flags[:fabric_enabled],
+ # An absolute path to your application root.
+ :app_path => "#{Pod::Config.instance.installation_root}/..",
+ # Note that if you have use_frameworks! enabled, Flipper will not work if enabled
+ :flipper_configuration => flipper_config
+ )
+
+ post_install do |installer|
+ react_native_post_install(
+ installer,
+ config[:reactNativePath],
+ :mac_catalyst_enabled => false
+ )
+ __apply_Xcode_12_5_M1_post_install_workaround(installer)
+
+ # This is necessary for Xcode 14, because it signs resource bundles by default
+ # when building for devices.
+ installer.target_installation_results.pod_target_installation_results
+ .each do |pod_name, target_installation_result|
+ target_installation_result.resource_bundle_targets.each do |resource_bundle_target|
+ resource_bundle_target.build_configurations.each do |config|
+ config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'
+ end
+ end
+ end
+ end
+
+ post_integrate do |installer|
+ begin
+ expo_patch_react_imports!(installer)
+ rescue => e
+ Pod::UI.warn e
+ end
+ end
+end
diff --git a/apps/tests/ios/Podfile.lock b/apps/tests/ios/Podfile.lock
new file mode 100644
index 000000000..0a5a6af22
--- /dev/null
+++ b/apps/tests/ios/Podfile.lock
@@ -0,0 +1,685 @@
+PODS:
+ - boost (1.76.0)
+ - DoubleConversion (1.1.6)
+ - EXApplication (5.3.1):
+ - ExpoModulesCore
+ - EXConstants (14.4.2):
+ - ExpoModulesCore
+ - EXFileSystem (15.4.4):
+ - ExpoModulesCore
+ - EXFont (11.4.0):
+ - ExpoModulesCore
+ - Expo (49.0.15):
+ - ExpoModulesCore
+ - ExpoKeepAwake (12.3.0):
+ - ExpoModulesCore
+ - ExpoModulesCore (1.5.11):
+ - RCT-Folly (= 2021.07.22.00)
+ - React-Core
+ - React-NativeModulesApple
+ - React-RCTAppDelegate
+ - ReactCommon/turbomodule/core
+ - EXSplashScreen (0.20.5):
+ - ExpoModulesCore
+ - RCT-Folly (= 2021.07.22.00)
+ - React-Core
+ - FBLazyVector (0.72.6)
+ - FBReactNativeSpec (0.72.6):
+ - RCT-Folly (= 2021.07.22.00)
+ - RCTRequired (= 0.72.6)
+ - RCTTypeSafety (= 0.72.6)
+ - React-Core (= 0.72.6)
+ - React-jsi (= 0.72.6)
+ - ReactCommon/turbomodule/core (= 0.72.6)
+ - fmt (6.2.1)
+ - glog (0.3.5)
+ - hermes-engine (0.72.6):
+ - hermes-engine/Pre-built (= 0.72.6)
+ - hermes-engine/Pre-built (0.72.6)
+ - libevent (2.1.12)
+ - powersync-sqlite-core (0.1.3)
+ - RCT-Folly (2021.07.22.00):
+ - boost
+ - DoubleConversion
+ - fmt (~> 6.2.1)
+ - glog
+ - RCT-Folly/Default (= 2021.07.22.00)
+ - RCT-Folly/Default (2021.07.22.00):
+ - boost
+ - DoubleConversion
+ - fmt (~> 6.2.1)
+ - glog
+ - RCT-Folly/Futures (2021.07.22.00):
+ - boost
+ - DoubleConversion
+ - fmt (~> 6.2.1)
+ - glog
+ - libevent
+ - RCTRequired (0.72.6)
+ - RCTTypeSafety (0.72.6):
+ - FBLazyVector (= 0.72.6)
+ - RCTRequired (= 0.72.6)
+ - React-Core (= 0.72.6)
+ - React (0.72.6):
+ - React-Core (= 0.72.6)
+ - React-Core/DevSupport (= 0.72.6)
+ - React-Core/RCTWebSocket (= 0.72.6)
+ - React-RCTActionSheet (= 0.72.6)
+ - React-RCTAnimation (= 0.72.6)
+ - React-RCTBlob (= 0.72.6)
+ - React-RCTImage (= 0.72.6)
+ - React-RCTLinking (= 0.72.6)
+ - React-RCTNetwork (= 0.72.6)
+ - React-RCTSettings (= 0.72.6)
+ - React-RCTText (= 0.72.6)
+ - React-RCTVibration (= 0.72.6)
+ - React-callinvoker (0.72.6)
+ - React-Codegen (0.72.6):
+ - DoubleConversion
+ - FBReactNativeSpec
+ - glog
+ - hermes-engine
+ - RCT-Folly
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-jsi
+ - React-jsiexecutor
+ - React-NativeModulesApple
+ - React-rncore
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
+ - React-Core (0.72.6):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-Core/Default (= 0.72.6)
+ - React-cxxreact
+ - React-hermes
+ - React-jsi
+ - React-jsiexecutor
+ - React-perflogger
+ - React-runtimeexecutor
+ - React-utils
+ - SocketRocket (= 0.6.1)
+ - Yoga
+ - React-Core/CoreModulesHeaders (0.72.6):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-Core/Default
+ - React-cxxreact
+ - React-hermes
+ - React-jsi
+ - React-jsiexecutor
+ - React-perflogger
+ - React-runtimeexecutor
+ - React-utils
+ - SocketRocket (= 0.6.1)
+ - Yoga
+ - React-Core/Default (0.72.6):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-cxxreact
+ - React-hermes
+ - React-jsi
+ - React-jsiexecutor
+ - React-perflogger
+ - React-runtimeexecutor
+ - React-utils
+ - SocketRocket (= 0.6.1)
+ - Yoga
+ - React-Core/DevSupport (0.72.6):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-Core/Default (= 0.72.6)
+ - React-Core/RCTWebSocket (= 0.72.6)
+ - React-cxxreact
+ - React-hermes
+ - React-jsi
+ - React-jsiexecutor
+ - React-jsinspector (= 0.72.6)
+ - React-perflogger
+ - React-runtimeexecutor
+ - React-utils
+ - SocketRocket (= 0.6.1)
+ - Yoga
+ - React-Core/RCTActionSheetHeaders (0.72.6):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-Core/Default
+ - React-cxxreact
+ - React-hermes
+ - React-jsi
+ - React-jsiexecutor
+ - React-perflogger
+ - React-runtimeexecutor
+ - React-utils
+ - SocketRocket (= 0.6.1)
+ - Yoga
+ - React-Core/RCTAnimationHeaders (0.72.6):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-Core/Default
+ - React-cxxreact
+ - React-hermes
+ - React-jsi
+ - React-jsiexecutor
+ - React-perflogger
+ - React-runtimeexecutor
+ - React-utils
+ - SocketRocket (= 0.6.1)
+ - Yoga
+ - React-Core/RCTBlobHeaders (0.72.6):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-Core/Default
+ - React-cxxreact
+ - React-hermes
+ - React-jsi
+ - React-jsiexecutor
+ - React-perflogger
+ - React-runtimeexecutor
+ - React-utils
+ - SocketRocket (= 0.6.1)
+ - Yoga
+ - React-Core/RCTImageHeaders (0.72.6):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-Core/Default
+ - React-cxxreact
+ - React-hermes
+ - React-jsi
+ - React-jsiexecutor
+ - React-perflogger
+ - React-runtimeexecutor
+ - React-utils
+ - SocketRocket (= 0.6.1)
+ - Yoga
+ - React-Core/RCTLinkingHeaders (0.72.6):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-Core/Default
+ - React-cxxreact
+ - React-hermes
+ - React-jsi
+ - React-jsiexecutor
+ - React-perflogger
+ - React-runtimeexecutor
+ - React-utils
+ - SocketRocket (= 0.6.1)
+ - Yoga
+ - React-Core/RCTNetworkHeaders (0.72.6):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-Core/Default
+ - React-cxxreact
+ - React-hermes
+ - React-jsi
+ - React-jsiexecutor
+ - React-perflogger
+ - React-runtimeexecutor
+ - React-utils
+ - SocketRocket (= 0.6.1)
+ - Yoga
+ - React-Core/RCTSettingsHeaders (0.72.6):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-Core/Default
+ - React-cxxreact
+ - React-hermes
+ - React-jsi
+ - React-jsiexecutor
+ - React-perflogger
+ - React-runtimeexecutor
+ - React-utils
+ - SocketRocket (= 0.6.1)
+ - Yoga
+ - React-Core/RCTTextHeaders (0.72.6):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-Core/Default
+ - React-cxxreact
+ - React-hermes
+ - React-jsi
+ - React-jsiexecutor
+ - React-perflogger
+ - React-runtimeexecutor
+ - React-utils
+ - SocketRocket (= 0.6.1)
+ - Yoga
+ - React-Core/RCTVibrationHeaders (0.72.6):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-Core/Default
+ - React-cxxreact
+ - React-hermes
+ - React-jsi
+ - React-jsiexecutor
+ - React-perflogger
+ - React-runtimeexecutor
+ - React-utils
+ - SocketRocket (= 0.6.1)
+ - Yoga
+ - React-Core/RCTWebSocket (0.72.6):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-Core/Default (= 0.72.6)
+ - React-cxxreact
+ - React-hermes
+ - React-jsi
+ - React-jsiexecutor
+ - React-perflogger
+ - React-runtimeexecutor
+ - React-utils
+ - SocketRocket (= 0.6.1)
+ - Yoga
+ - React-CoreModules (0.72.6):
+ - RCT-Folly (= 2021.07.22.00)
+ - RCTTypeSafety (= 0.72.6)
+ - React-Codegen (= 0.72.6)
+ - React-Core/CoreModulesHeaders (= 0.72.6)
+ - React-jsi (= 0.72.6)
+ - React-RCTBlob
+ - React-RCTImage (= 0.72.6)
+ - ReactCommon/turbomodule/core (= 0.72.6)
+ - SocketRocket (= 0.6.1)
+ - React-cxxreact (0.72.6):
+ - boost (= 1.76.0)
+ - DoubleConversion
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-callinvoker (= 0.72.6)
+ - React-debug (= 0.72.6)
+ - React-jsi (= 0.72.6)
+ - React-jsinspector (= 0.72.6)
+ - React-logger (= 0.72.6)
+ - React-perflogger (= 0.72.6)
+ - React-runtimeexecutor (= 0.72.6)
+ - React-debug (0.72.6)
+ - React-hermes (0.72.6):
+ - DoubleConversion
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - RCT-Folly/Futures (= 2021.07.22.00)
+ - React-cxxreact (= 0.72.6)
+ - React-jsi
+ - React-jsiexecutor (= 0.72.6)
+ - React-jsinspector (= 0.72.6)
+ - React-perflogger (= 0.72.6)
+ - React-jsi (0.72.6):
+ - boost (= 1.76.0)
+ - DoubleConversion
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-jsiexecutor (0.72.6):
+ - DoubleConversion
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-cxxreact (= 0.72.6)
+ - React-jsi (= 0.72.6)
+ - React-perflogger (= 0.72.6)
+ - React-jsinspector (0.72.6)
+ - React-logger (0.72.6):
+ - glog
+ - react-native-get-random-values (1.9.0):
+ - React-Core
+ - react-native-quick-sqlite (0.0.1):
+ - powersync-sqlite-core
+ - React
+ - React-callinvoker
+ - React-Core
+ - react-native-safe-area-context (4.7.3):
+ - React-Core
+ - React-NativeModulesApple (0.72.6):
+ - hermes-engine
+ - React-callinvoker
+ - React-Core
+ - React-cxxreact
+ - React-jsi
+ - React-runtimeexecutor
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
+ - React-perflogger (0.72.6)
+ - React-RCTActionSheet (0.72.6):
+ - React-Core/RCTActionSheetHeaders (= 0.72.6)
+ - React-RCTAnimation (0.72.6):
+ - RCT-Folly (= 2021.07.22.00)
+ - RCTTypeSafety (= 0.72.6)
+ - React-Codegen (= 0.72.6)
+ - React-Core/RCTAnimationHeaders (= 0.72.6)
+ - React-jsi (= 0.72.6)
+ - ReactCommon/turbomodule/core (= 0.72.6)
+ - React-RCTAppDelegate (0.72.6):
+ - RCT-Folly
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-CoreModules
+ - React-hermes
+ - React-NativeModulesApple
+ - React-RCTImage
+ - React-RCTNetwork
+ - React-runtimescheduler
+ - ReactCommon/turbomodule/core
+ - React-RCTBlob (0.72.6):
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-Codegen (= 0.72.6)
+ - React-Core/RCTBlobHeaders (= 0.72.6)
+ - React-Core/RCTWebSocket (= 0.72.6)
+ - React-jsi (= 0.72.6)
+ - React-RCTNetwork (= 0.72.6)
+ - ReactCommon/turbomodule/core (= 0.72.6)
+ - React-RCTImage (0.72.6):
+ - RCT-Folly (= 2021.07.22.00)
+ - RCTTypeSafety (= 0.72.6)
+ - React-Codegen (= 0.72.6)
+ - React-Core/RCTImageHeaders (= 0.72.6)
+ - React-jsi (= 0.72.6)
+ - React-RCTNetwork (= 0.72.6)
+ - ReactCommon/turbomodule/core (= 0.72.6)
+ - React-RCTLinking (0.72.6):
+ - React-Codegen (= 0.72.6)
+ - React-Core/RCTLinkingHeaders (= 0.72.6)
+ - React-jsi (= 0.72.6)
+ - ReactCommon/turbomodule/core (= 0.72.6)
+ - React-RCTNetwork (0.72.6):
+ - RCT-Folly (= 2021.07.22.00)
+ - RCTTypeSafety (= 0.72.6)
+ - React-Codegen (= 0.72.6)
+ - React-Core/RCTNetworkHeaders (= 0.72.6)
+ - React-jsi (= 0.72.6)
+ - ReactCommon/turbomodule/core (= 0.72.6)
+ - React-RCTSettings (0.72.6):
+ - RCT-Folly (= 2021.07.22.00)
+ - RCTTypeSafety (= 0.72.6)
+ - React-Codegen (= 0.72.6)
+ - React-Core/RCTSettingsHeaders (= 0.72.6)
+ - React-jsi (= 0.72.6)
+ - ReactCommon/turbomodule/core (= 0.72.6)
+ - React-RCTText (0.72.6):
+ - React-Core/RCTTextHeaders (= 0.72.6)
+ - React-RCTVibration (0.72.6):
+ - RCT-Folly (= 2021.07.22.00)
+ - React-Codegen (= 0.72.6)
+ - React-Core/RCTVibrationHeaders (= 0.72.6)
+ - React-jsi (= 0.72.6)
+ - ReactCommon/turbomodule/core (= 0.72.6)
+ - React-rncore (0.72.6)
+ - React-runtimeexecutor (0.72.6):
+ - React-jsi (= 0.72.6)
+ - React-runtimescheduler (0.72.6):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-callinvoker
+ - React-debug
+ - React-jsi
+ - React-runtimeexecutor
+ - React-utils (0.72.6):
+ - glog
+ - RCT-Folly (= 2021.07.22.00)
+ - React-debug
+ - ReactCommon/turbomodule/bridging (0.72.6):
+ - DoubleConversion
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-callinvoker (= 0.72.6)
+ - React-cxxreact (= 0.72.6)
+ - React-jsi (= 0.72.6)
+ - React-logger (= 0.72.6)
+ - React-perflogger (= 0.72.6)
+ - ReactCommon/turbomodule/core (0.72.6):
+ - DoubleConversion
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-callinvoker (= 0.72.6)
+ - React-cxxreact (= 0.72.6)
+ - React-jsi (= 0.72.6)
+ - React-logger (= 0.72.6)
+ - React-perflogger (= 0.72.6)
+ - SocketRocket (0.6.1)
+ - Yoga (1.14.0)
+
+DEPENDENCIES:
+ - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`)
+ - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
+ - EXApplication (from `../node_modules/expo-application/ios`)
+ - EXConstants (from `../node_modules/expo-constants/ios`)
+ - EXFileSystem (from `../node_modules/expo-file-system/ios`)
+ - EXFont (from `../node_modules/expo-font/ios`)
+ - Expo (from `../node_modules/expo`)
+ - ExpoKeepAwake (from `../node_modules/expo-keep-awake/ios`)
+ - ExpoModulesCore (from `../node_modules/expo-modules-core`)
+ - EXSplashScreen (from `../node_modules/expo-splash-screen/ios`)
+ - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
+ - FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`)
+ - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
+ - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`)
+ - libevent (~> 2.1.12)
+ - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.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-Codegen (from `build/generated/ios`)
+ - React-Core (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-debug (from `../node_modules/react-native/ReactCommon/react/debug`)
+ - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`)
+ - 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-logger (from `../node_modules/react-native/ReactCommon/logger`)
+ - react-native-get-random-values (from `../node_modules/react-native-get-random-values`)
+ - react-native-quick-sqlite (from `../node_modules/react-native-quick-sqlite`)
+ - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
+ - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`)
+ - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`)
+ - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`)
+ - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`)
+ - React-RCTAppDelegate (from `../node_modules/react-native/Libraries/AppDelegate`)
+ - 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`)
+ - React-rncore (from `../node_modules/react-native/ReactCommon`)
+ - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`)
+ - React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`)
+ - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`)
+ - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
+ - Yoga (from `../node_modules/react-native/ReactCommon/yoga`)
+
+SPEC REPOS:
+ trunk:
+ - fmt
+ - libevent
+ - powersync-sqlite-core
+ - SocketRocket
+
+EXTERNAL SOURCES:
+ boost:
+ :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec"
+ DoubleConversion:
+ :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec"
+ EXApplication:
+ :path: "../node_modules/expo-application/ios"
+ EXConstants:
+ :path: "../node_modules/expo-constants/ios"
+ EXFileSystem:
+ :path: "../node_modules/expo-file-system/ios"
+ EXFont:
+ :path: "../node_modules/expo-font/ios"
+ Expo:
+ :path: "../node_modules/expo"
+ ExpoKeepAwake:
+ :path: "../node_modules/expo-keep-awake/ios"
+ ExpoModulesCore:
+ :path: "../node_modules/expo-modules-core"
+ EXSplashScreen:
+ :path: "../node_modules/expo-splash-screen/ios"
+ FBLazyVector:
+ :path: "../node_modules/react-native/Libraries/FBLazyVector"
+ FBReactNativeSpec:
+ :path: "../node_modules/react-native/React/FBReactNativeSpec"
+ glog:
+ :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec"
+ hermes-engine:
+ :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec"
+ :tag: hermes-2023-08-07-RNv0.72.4-813b2def12bc9df02654b3e3653ae4a68d0572e0
+ RCT-Folly:
+ :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.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-Codegen:
+ :path: build/generated/ios
+ 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-debug:
+ :path: "../node_modules/react-native/ReactCommon/react/debug"
+ React-hermes:
+ :path: "../node_modules/react-native/ReactCommon/hermes"
+ 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-logger:
+ :path: "../node_modules/react-native/ReactCommon/logger"
+ react-native-get-random-values:
+ :path: "../node_modules/react-native-get-random-values"
+ react-native-quick-sqlite:
+ :path: "../node_modules/react-native-quick-sqlite"
+ react-native-safe-area-context:
+ :path: "../node_modules/react-native-safe-area-context"
+ React-NativeModulesApple:
+ :path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios"
+ React-perflogger:
+ :path: "../node_modules/react-native/ReactCommon/reactperflogger"
+ React-RCTActionSheet:
+ :path: "../node_modules/react-native/Libraries/ActionSheetIOS"
+ React-RCTAnimation:
+ :path: "../node_modules/react-native/Libraries/NativeAnimation"
+ React-RCTAppDelegate:
+ :path: "../node_modules/react-native/Libraries/AppDelegate"
+ 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"
+ React-rncore:
+ :path: "../node_modules/react-native/ReactCommon"
+ React-runtimeexecutor:
+ :path: "../node_modules/react-native/ReactCommon/runtimeexecutor"
+ React-runtimescheduler:
+ :path: "../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler"
+ React-utils:
+ :path: "../node_modules/react-native/ReactCommon/react/utils"
+ ReactCommon:
+ :path: "../node_modules/react-native/ReactCommon"
+ Yoga:
+ :path: "../node_modules/react-native/ReactCommon/yoga"
+
+SPEC CHECKSUMS:
+ boost: 57d2868c099736d80fcd648bf211b4431e51a558
+ DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54
+ EXApplication: 042aa2e3f05258a16962ea1a9914bf288db9c9a1
+ EXConstants: ce5bbea779da8031ac818c36bea41b10e14d04e1
+ EXFileSystem: 2b826a3bf1071a4b80a8457e97124783d1ac860e
+ EXFont: 738c44c390953ebcbab075a4848bfbef025fd9ee
+ Expo: 4ddd44075a2e7c7c63a0f5b1e05223be74d48bc6
+ ExpoKeepAwake: be4cbd52d9b177cde0fd66daa1913afa3161fc1d
+ ExpoModulesCore: 51cb2e7ab4c8da14be3f40b66d54c1781002e99d
+ EXSplashScreen: c0e7f2d4a640f3b875808ed0b88575538daf6d82
+ FBLazyVector: 748c0ef74f2bf4b36cfcccf37916806940a64c32
+ FBReactNativeSpec: 966f29e4e697de53a3b366355e8f57375c856ad9
+ fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
+ glog: 04b94705f318337d7ead9e6d17c019bd9b1f6b1b
+ hermes-engine: 8057e75cfc1437b178ac86c8654b24e7fead7f60
+ libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
+ powersync-sqlite-core: a8c9c0f5ddb25099973bece98776080400346fe3
+ RCT-Folly: 424b8c9a7a0b9ab2886ffe9c3b041ef628fd4fb1
+ RCTRequired: 28469809442eb4eb5528462705f7d852948c8a74
+ RCTTypeSafety: e9c6c409fca2cc584e5b086862d562540cb38d29
+ React: 769f469909b18edfe934f0539fffb319c4c61043
+ React-callinvoker: e48ce12c83706401251921896576710d81e54763
+ React-Codegen: a136b8094d39fd071994eaa935366e6be2239cb1
+ React-Core: e548a186fb01c3a78a9aeeffa212d625ca9511bf
+ React-CoreModules: d226b22d06ea1bc4e49d3c073b2c6cbb42265405
+ React-cxxreact: 44a3560510ead6633b6e02f9fbbdd1772fb40f92
+ React-debug: 238501490155574ae9f3f8dd1c74330eba30133e
+ React-hermes: 46e66dc854124d7645c20bfec0a6be9542826ecd
+ React-jsi: fbdaf4166bae60524b591b18c851b530c8cdb90c
+ React-jsiexecutor: 3bf18ff7cb03cd8dfdce08fbbc0d15058c1d71ae
+ React-jsinspector: 194e32c6aab382d88713ad3dd0025c5f5c4ee072
+ React-logger: cebf22b6cf43434e471dc561e5911b40ac01d289
+ react-native-get-random-values: dee677497c6a740b71e5612e8dbd83e7539ed5bb
+ react-native-quick-sqlite: bb695834cb1f4b88c3c2ae413ecf6522e9d221c3
+ react-native-safe-area-context: 238cd8b619e05cb904ccad97ef42e84d1b5ae6ec
+ React-NativeModulesApple: 02e35e9a51e10c6422f04f5e4076a7c02243fff2
+ React-perflogger: e3596db7e753f51766bceadc061936ef1472edc3
+ React-RCTActionSheet: 17ab132c748b4471012abbcdcf5befe860660485
+ React-RCTAnimation: c8bbaab62be5817d2a31c36d5f2571e3f7dcf099
+ React-RCTAppDelegate: af1c7dace233deba4b933cd1d6491fe4e3584ad1
+ React-RCTBlob: 1bcf3a0341eb8d6950009b1ddb8aefaf46996b8c
+ React-RCTImage: 670a3486b532292649b1aef3ffddd0b495a5cee4
+ React-RCTLinking: bd7ab853144aed463903237e615fd91d11b4f659
+ React-RCTNetwork: be86a621f3e4724758f23ad1fdce32474ab3d829
+ React-RCTSettings: 4f3a29a6d23ffa639db9701bc29af43f30781058
+ React-RCTText: adde32164a243103aaba0b1dc7b0a2599733873e
+ React-RCTVibration: 6bd85328388ac2e82ae0ca11afe48ad5555b483a
+ React-rncore: fda7b1ae5918fa7baa259105298a5487875a57c8
+ React-runtimeexecutor: 57d85d942862b08f6d15441a0badff2542fd233c
+ React-runtimescheduler: f23e337008403341177fc52ee4ca94e442c17ede
+ React-utils: fa59c9a3375fb6f4aeb66714fd3f7f76b43a9f16
+ ReactCommon: dd03c17275c200496f346af93a7b94c53f3093a4
+ SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17
+ Yoga: b76f1acfda8212aa16b7e26bcce3983230c82603
+
+PODFILE CHECKSUM: 1f188f526de7aeed7b7cf83c25ff1e25506d00fc
+
+COCOAPODS: 1.13.0
diff --git a/apps/tests/ios/Podfile.properties.json b/apps/tests/ios/Podfile.properties.json
new file mode 100644
index 000000000..de9f7b752
--- /dev/null
+++ b/apps/tests/ios/Podfile.properties.json
@@ -0,0 +1,4 @@
+{
+ "expo.jsEngine": "hermes",
+ "EX_DEV_CLIENT_NETWORK_INSPECTOR": "true"
+}
diff --git a/apps/tests/ios/tests.xcodeproj/project.pbxproj b/apps/tests/ios/tests.xcodeproj/project.pbxproj
new file mode 100644
index 000000000..5c147099e
--- /dev/null
+++ b/apps/tests/ios/tests.xcodeproj/project.pbxproj
@@ -0,0 +1,553 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };
+ 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
+ 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
+ 3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; };
+ 96905EF65AED1B983A6B3ABC /* libPods-tests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-tests.a */; };
+ B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; };
+ BB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; };
+ C652D5C68AD848D0BDF5DF01 /* noop-file.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64C197B44ADA4F22A29E76A1 /* noop-file.swift */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 13B07F961A680F5B00A75B9A /* tests.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tests.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = tests/AppDelegate.h; sourceTree = ""; };
+ 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = tests/AppDelegate.mm; sourceTree = ""; };
+ 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = tests/Images.xcassets; sourceTree = ""; };
+ 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = tests/Info.plist; sourceTree = ""; };
+ 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = tests/main.m; sourceTree = ""; };
+ 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-tests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-tests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 64C197B44ADA4F22A29E76A1 /* noop-file.swift */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.swift; name = "noop-file.swift"; path = "tests/noop-file.swift"; sourceTree = ""; };
+ 6C2E3173556A471DD304B334 /* Pods-tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-tests.debug.xcconfig"; path = "Target Support Files/Pods-tests/Pods-tests.debug.xcconfig"; sourceTree = ""; };
+ 7A4D352CD337FB3A3BF06240 /* Pods-tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-tests.release.xcconfig"; path = "Target Support Files/Pods-tests/Pods-tests.release.xcconfig"; sourceTree = ""; };
+ AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = tests/SplashScreen.storyboard; sourceTree = ""; };
+ BB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = ""; };
+ D2218BDC101C4F8E8015DBE1 /* tests-Bridging-Header.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "tests-Bridging-Header.h"; path = "tests/tests-Bridging-Header.h"; sourceTree = ""; };
+ ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
+ FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-tests/ExpoModulesProvider.swift"; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 96905EF65AED1B983A6B3ABC /* libPods-tests.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 13B07FAE1A68108700A75B9A /* tests */ = {
+ isa = PBXGroup;
+ children = (
+ BB2F792B24A3F905000567C9 /* Supporting */,
+ 13B07FAF1A68108700A75B9A /* AppDelegate.h */,
+ 13B07FB01A68108700A75B9A /* AppDelegate.mm */,
+ 13B07FB51A68108700A75B9A /* Images.xcassets */,
+ 13B07FB61A68108700A75B9A /* Info.plist */,
+ 13B07FB71A68108700A75B9A /* main.m */,
+ AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */,
+ 64C197B44ADA4F22A29E76A1 /* noop-file.swift */,
+ D2218BDC101C4F8E8015DBE1 /* tests-Bridging-Header.h */,
+ );
+ name = tests;
+ sourceTree = "";
+ };
+ 2D16E6871FA4F8E400B85C8A /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
+ 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-tests.a */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+ 832341AE1AAA6A7D00B99B32 /* Libraries */ = {
+ isa = PBXGroup;
+ children = (
+ );
+ name = Libraries;
+ sourceTree = "";
+ };
+ 83CBB9F61A601CBA00E9B192 = {
+ isa = PBXGroup;
+ children = (
+ 13B07FAE1A68108700A75B9A /* tests */,
+ 832341AE1AAA6A7D00B99B32 /* Libraries */,
+ 83CBBA001A601CBA00E9B192 /* Products */,
+ 2D16E6871FA4F8E400B85C8A /* Frameworks */,
+ D65327D7A22EEC0BE12398D9 /* Pods */,
+ D7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */,
+ );
+ indentWidth = 2;
+ sourceTree = "";
+ tabWidth = 2;
+ usesTabs = 0;
+ };
+ 83CBBA001A601CBA00E9B192 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 13B07F961A680F5B00A75B9A /* tests.app */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 92DBD88DE9BF7D494EA9DA96 /* tests */ = {
+ isa = PBXGroup;
+ children = (
+ FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */,
+ );
+ name = tests;
+ sourceTree = "";
+ };
+ BB2F792B24A3F905000567C9 /* Supporting */ = {
+ isa = PBXGroup;
+ children = (
+ BB2F792C24A3F905000567C9 /* Expo.plist */,
+ );
+ name = Supporting;
+ path = tests/Supporting;
+ sourceTree = "";
+ };
+ D65327D7A22EEC0BE12398D9 /* Pods */ = {
+ isa = PBXGroup;
+ children = (
+ 6C2E3173556A471DD304B334 /* Pods-tests.debug.xcconfig */,
+ 7A4D352CD337FB3A3BF06240 /* Pods-tests.release.xcconfig */,
+ );
+ path = Pods;
+ sourceTree = "";
+ };
+ D7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */ = {
+ isa = PBXGroup;
+ children = (
+ 92DBD88DE9BF7D494EA9DA96 /* tests */,
+ );
+ name = ExpoModulesProviders;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 13B07F861A680F5B00A75B9A /* tests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "tests" */;
+ buildPhases = (
+ 08A4A3CD28434E44B6B9DE2E /* [CP] Check Pods Manifest.lock */,
+ FD10A7F022414F080027D42C /* Start Packager */,
+ 2BDD10D66341B445FD87AEEB /* [Expo] Configure project */,
+ 13B07F871A680F5B00A75B9A /* Sources */,
+ 13B07F8C1A680F5B00A75B9A /* Frameworks */,
+ 13B07F8E1A680F5B00A75B9A /* Resources */,
+ 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
+ 800E24972A6A228C8D4807E9 /* [CP] Copy Pods Resources */,
+ 1F8F8FD9DAC8389AF398F98B /* [CP] Embed Pods Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = tests;
+ productName = tests;
+ productReference = 13B07F961A680F5B00A75B9A /* tests.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 83CBB9F71A601CBA00E9B192 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 1130;
+ TargetAttributes = {
+ 13B07F861A680F5B00A75B9A = {
+ LastSwiftMigration = 1250;
+ };
+ };
+ };
+ buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "tests" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = en;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = 83CBB9F61A601CBA00E9B192;
+ productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 13B07F861A680F5B00A75B9A /* tests */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 13B07F8E1A680F5B00A75B9A /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ BB2F792D24A3F905000567C9 /* Expo.plist in Resources */,
+ 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
+ 3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Bundle React Native code and images";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ 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\nif [[ -z \"$CLI_PATH\" ]]; then\n # Use Expo CLI\n export CLI_PATH=\"$(\"$NODE_BINARY\" --print \"require.resolve('@expo/cli')\")\"\nfi\nif [[ -z \"$BUNDLE_COMMAND\" ]]; then\n # Default Expo CLI command for bundling\n export BUNDLE_COMMAND=\"export:embed\"\nfi\n\n`\"$NODE_BINARY\" --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/scripts/react-native-xcode.sh'\"`\n\n";
+ };
+ 08A4A3CD28434E44B6B9DE2E /* [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-tests-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;
+ };
+ 1F8F8FD9DAC8389AF398F98B /* [CP] Embed Pods Frameworks */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-tests/Pods-tests-frameworks.sh",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes",
+ "${PODS_XCFRAMEWORKS_BUILD_DIR}/powersync-sqlite-core/powersync-sqlite-core.framework/powersync-sqlite-core",
+ );
+ name = "[CP] Embed Pods Frameworks";
+ outputPaths = (
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/powersync-sqlite-core.framework",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-tests/Pods-tests-frameworks.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 2BDD10D66341B445FD87AEEB /* [Expo] Configure project */ = {
+ isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ );
+ name = "[Expo] Configure project";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-tests/expo-configure-project.sh\"\n";
+ };
+ 800E24972A6A228C8D4807E9 /* [CP] Copy Pods Resources */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-tests/Pods-tests-resources.sh",
+ "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/EXConstants.bundle",
+ "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle",
+ );
+ name = "[CP] Copy Pods Resources";
+ outputPaths = (
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXConstants.bundle",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-tests/Pods-tests-resources.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ FD10A7F022414F080027D42C /* Start Packager */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ );
+ name = "Start Packager";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ 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('expo/package.json')) + '/scripts/launchPackager.command'\"` || echo \"Can't start packager automatically\"\n fi\nfi\n";
+ showEnvVarsInLog = 0;
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 13B07F871A680F5B00A75B9A /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,
+ 13B07FC11A68108700A75B9A /* main.m in Sources */,
+ B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */,
+ C652D5C68AD848D0BDF5DF01 /* noop-file.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+ 13B07F941A680F5B00A75B9A /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 6C2E3173556A471DD304B334 /* Pods-tests.debug.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_ENTITLEMENTS = tests/tests.entitlements;
+ CURRENT_PROJECT_VERSION = 1;
+ ENABLE_BITCODE = NO;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(inherited)",
+ "FB_SONARKIT_ENABLED=1",
+ );
+ INFOPLIST_FILE = tests/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ MARKETING_VERSION = 1.0;
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ "-lc++",
+ );
+ OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG";
+ PRODUCT_BUNDLE_IDENTIFIER = y;
+ PRODUCT_NAME = tests;
+ SWIFT_OBJC_BRIDGING_HEADER = "tests/tests-Bridging-Header.h";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Debug;
+ };
+ 13B07F951A680F5B00A75B9A /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 7A4D352CD337FB3A3BF06240 /* Pods-tests.release.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_ENTITLEMENTS = tests/tests.entitlements;
+ CURRENT_PROJECT_VERSION = 1;
+ INFOPLIST_FILE = tests/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ MARKETING_VERSION = 1.0;
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ "-lc++",
+ );
+ OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
+ PRODUCT_BUNDLE_IDENTIFIER = y;
+ PRODUCT_NAME = tests;
+ SWIFT_OBJC_BRIDGING_HEADER = "tests/tests-Bridging-Header.h";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Release;
+ };
+ 83CBBA201A601CBA00E9B192 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "c++17";
+ 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;
+ "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ _LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION,
+ );
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ 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 = 13.0;
+ LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)";
+ LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\"";
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ OTHER_CFLAGS = "$(inherited)";
+ OTHER_CPLUSPLUSFLAGS = "$(inherited)";
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-Wl",
+ "-ld_classic",
+ );
+ REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
+ SDKROOT = iphoneos;
+ };
+ name = Debug;
+ };
+ 83CBBA211A601CBA00E9B192 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "c++17";
+ 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 = YES;
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(inherited)",
+ _LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION,
+ );
+ 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 = 13.0;
+ LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)";
+ LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\"";
+ MTL_ENABLE_DEBUG_INFO = NO;
+ OTHER_CFLAGS = "$(inherited)";
+ OTHER_CPLUSPLUSFLAGS = "$(inherited)";
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-Wl",
+ "-ld_classic",
+ );
+ REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
+ SDKROOT = iphoneos;
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "tests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 13B07F941A680F5B00A75B9A /* Debug */,
+ 13B07F951A680F5B00A75B9A /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "tests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 83CBBA201A601CBA00E9B192 /* Debug */,
+ 83CBBA211A601CBA00E9B192 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
+}
diff --git a/apps/tests/ios/tests.xcodeproj/xcshareddata/xcschemes/tests.xcscheme b/apps/tests/ios/tests.xcodeproj/xcshareddata/xcschemes/tests.xcscheme
new file mode 100644
index 000000000..eb20e8440
--- /dev/null
+++ b/apps/tests/ios/tests.xcodeproj/xcshareddata/xcschemes/tests.xcscheme
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/tests/ios/tests.xcworkspace/contents.xcworkspacedata b/apps/tests/ios/tests.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 000000000..9c9b80017
--- /dev/null
+++ b/apps/tests/ios/tests.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
diff --git a/apps/tests/ios/tests/AppDelegate.h b/apps/tests/ios/tests/AppDelegate.h
new file mode 100644
index 000000000..1658a437e
--- /dev/null
+++ b/apps/tests/ios/tests/AppDelegate.h
@@ -0,0 +1,7 @@
+#import
+#import
+#import
+
+@interface AppDelegate : EXAppDelegateWrapper
+
+@end
diff --git a/apps/tests/ios/tests/AppDelegate.mm b/apps/tests/ios/tests/AppDelegate.mm
new file mode 100644
index 000000000..f8e88bbe0
--- /dev/null
+++ b/apps/tests/ios/tests/AppDelegate.mm
@@ -0,0 +1,57 @@
+#import "AppDelegate.h"
+
+#import
+#import
+
+@implementation AppDelegate
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
+{
+ self.moduleName = @"main";
+
+ // You can add your custom initial props in the dictionary below.
+ // They will be passed down to the ViewController used by React Native.
+ self.initialProps = @{};
+
+ return [super application:application didFinishLaunchingWithOptions:launchOptions];
+}
+
+- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
+{
+#if DEBUG
+ return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@".expo/.virtual-metro-entry"];
+#else
+ return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
+#endif
+}
+
+// Linking API
+- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary *)options {
+ return [super application:application openURL:url options:options] || [RCTLinkingManager application:application openURL:url options:options];
+}
+
+// Universal Links
+- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray> * _Nullable))restorationHandler {
+ BOOL result = [RCTLinkingManager application:application continueUserActivity:userActivity restorationHandler:restorationHandler];
+ return [super application:application continueUserActivity:userActivity restorationHandler:restorationHandler] || result;
+}
+
+// Explicitly define remote notification delegates to ensure compatibility with some third-party libraries
+- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
+{
+ return [super application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
+}
+
+// Explicitly define remote notification delegates to ensure compatibility with some third-party libraries
+- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
+{
+ return [super application:application didFailToRegisterForRemoteNotificationsWithError:error];
+}
+
+// Explicitly define remote notification delegates to ensure compatibility with some third-party libraries
+- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
+{
+ return [super application:application didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler];
+}
+
+@end
diff --git a/apps/tests/ios/tests/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png b/apps/tests/ios/tests/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png
new file mode 100644
index 000000000..2732229fa
Binary files /dev/null and b/apps/tests/ios/tests/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png differ
diff --git a/apps/tests/ios/tests/Images.xcassets/AppIcon.appiconset/Contents.json b/apps/tests/ios/tests/Images.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 000000000..90d8d4c2a
--- /dev/null
+++ b/apps/tests/ios/tests/Images.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,14 @@
+{
+ "images": [
+ {
+ "filename": "App-Icon-1024x1024@1x.png",
+ "idiom": "universal",
+ "platform": "ios",
+ "size": "1024x1024"
+ }
+ ],
+ "info": {
+ "version": 1,
+ "author": "expo"
+ }
+}
\ No newline at end of file
diff --git a/apps/tests/ios/tests/Images.xcassets/Contents.json b/apps/tests/ios/tests/Images.xcassets/Contents.json
new file mode 100644
index 000000000..ed285c2e5
--- /dev/null
+++ b/apps/tests/ios/tests/Images.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "version" : 1,
+ "author" : "expo"
+ }
+}
diff --git a/apps/tests/ios/tests/Images.xcassets/SplashScreen.imageset/Contents.json b/apps/tests/ios/tests/Images.xcassets/SplashScreen.imageset/Contents.json
new file mode 100644
index 000000000..3cf848977
--- /dev/null
+++ b/apps/tests/ios/tests/Images.xcassets/SplashScreen.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+ "images": [
+ {
+ "idiom": "universal",
+ "filename": "image.png",
+ "scale": "1x"
+ },
+ {
+ "idiom": "universal",
+ "scale": "2x"
+ },
+ {
+ "idiom": "universal",
+ "scale": "3x"
+ }
+ ],
+ "info": {
+ "version": 1,
+ "author": "expo"
+ }
+}
\ No newline at end of file
diff --git a/apps/tests/ios/tests/Images.xcassets/SplashScreen.imageset/image.png b/apps/tests/ios/tests/Images.xcassets/SplashScreen.imageset/image.png
new file mode 100644
index 000000000..c52c2c680
Binary files /dev/null and b/apps/tests/ios/tests/Images.xcassets/SplashScreen.imageset/image.png differ
diff --git a/apps/tests/ios/tests/Images.xcassets/SplashScreenBackground.imageset/Contents.json b/apps/tests/ios/tests/Images.xcassets/SplashScreenBackground.imageset/Contents.json
new file mode 100644
index 000000000..3cf848977
--- /dev/null
+++ b/apps/tests/ios/tests/Images.xcassets/SplashScreenBackground.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+ "images": [
+ {
+ "idiom": "universal",
+ "filename": "image.png",
+ "scale": "1x"
+ },
+ {
+ "idiom": "universal",
+ "scale": "2x"
+ },
+ {
+ "idiom": "universal",
+ "scale": "3x"
+ }
+ ],
+ "info": {
+ "version": 1,
+ "author": "expo"
+ }
+}
\ No newline at end of file
diff --git a/apps/tests/ios/tests/Images.xcassets/SplashScreenBackground.imageset/image.png b/apps/tests/ios/tests/Images.xcassets/SplashScreenBackground.imageset/image.png
new file mode 100644
index 000000000..33ddf20bb
Binary files /dev/null and b/apps/tests/ios/tests/Images.xcassets/SplashScreenBackground.imageset/image.png differ
diff --git a/apps/tests/ios/tests/Info.plist b/apps/tests/ios/tests/Info.plist
new file mode 100644
index 000000000..ebc03cbcd
--- /dev/null
+++ b/apps/tests/ios/tests/Info.plist
@@ -0,0 +1,78 @@
+
+
+
+
+ CADisableMinimumFrameDurationOnPhone
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleDisplayName
+ tests
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ $(PRODUCT_BUNDLE_PACKAGE_TYPE)
+ CFBundleShortVersionString
+ 1.0.0
+ CFBundleSignature
+ ????
+ CFBundleURLTypes
+
+
+ CFBundleURLSchemes
+
+ y
+
+
+
+ CFBundleVersion
+ 1
+ LSRequiresIPhoneOS
+
+ NSAppTransportSecurity
+
+ NSAllowsArbitraryLoads
+
+ NSExceptionDomains
+
+ localhost
+
+ NSExceptionAllowsInsecureHTTPLoads
+
+
+
+
+ UILaunchStoryboardName
+ SplashScreen
+ UIRequiredDeviceCapabilities
+
+ armv7
+
+ UIRequiresFullScreen
+
+ UIStatusBarStyle
+ UIStatusBarStyleDefault
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UIUserInterfaceStyle
+ Light
+ UIViewControllerBasedStatusBarAppearance
+
+
+
\ No newline at end of file
diff --git a/apps/tests/ios/tests/SplashScreen.storyboard b/apps/tests/ios/tests/SplashScreen.storyboard
new file mode 100644
index 000000000..ed03a5299
--- /dev/null
+++ b/apps/tests/ios/tests/SplashScreen.storyboard
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/tests/ios/tests/Supporting/Expo.plist b/apps/tests/ios/tests/Supporting/Expo.plist
new file mode 100644
index 000000000..64eaffaac
--- /dev/null
+++ b/apps/tests/ios/tests/Supporting/Expo.plist
@@ -0,0 +1,14 @@
+
+
+
+
+ EXUpdatesCheckOnLaunch
+ ALWAYS
+ EXUpdatesEnabled
+
+ EXUpdatesLaunchWaitMs
+ 0
+ EXUpdatesSDKVersion
+ 49.0.0
+
+
\ No newline at end of file
diff --git a/apps/tests/ios/tests/main.m b/apps/tests/ios/tests/main.m
new file mode 100644
index 000000000..25181b6cc
--- /dev/null
+++ b/apps/tests/ios/tests/main.m
@@ -0,0 +1,10 @@
+#import
+
+#import "AppDelegate.h"
+
+int main(int argc, char * argv[]) {
+ @autoreleasepool {
+ return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
+ }
+}
+
diff --git a/apps/tests/ios/tests/noop-file.swift b/apps/tests/ios/tests/noop-file.swift
new file mode 100644
index 000000000..b2ffafbfc
--- /dev/null
+++ b/apps/tests/ios/tests/noop-file.swift
@@ -0,0 +1,4 @@
+//
+// @generated
+// A blank Swift file must be created for native modules with Swift files to work correctly.
+//
diff --git a/apps/tests/ios/tests/tests-Bridging-Header.h b/apps/tests/ios/tests/tests-Bridging-Header.h
new file mode 100644
index 000000000..e11d920b1
--- /dev/null
+++ b/apps/tests/ios/tests/tests-Bridging-Header.h
@@ -0,0 +1,3 @@
+//
+// Use this file to import your target's public headers that you would like to expose to Swift.
+//
diff --git a/apps/tests/ios/tests/tests.entitlements b/apps/tests/ios/tests/tests.entitlements
new file mode 100644
index 000000000..018a6e20c
--- /dev/null
+++ b/apps/tests/ios/tests/tests.entitlements
@@ -0,0 +1,8 @@
+
+
+
+
+ aps-environment
+ development
+
+
\ No newline at end of file
diff --git a/apps/tests/metro.config.js b/apps/tests/metro.config.js
new file mode 100644
index 000000000..29737f5f0
--- /dev/null
+++ b/apps/tests/metro.config.js
@@ -0,0 +1,31 @@
+const { getDefaultConfig } = require('expo/metro-config');
+const path = require('path');
+const findWorkspaceRoot = require('find-yarn-workspace-root');
+
+// Find the project and workspace directories
+const projectRoot = __dirname;
+
+const config = getDefaultConfig(projectRoot);
+
+const workspaceRoot = findWorkspaceRoot(__dirname);
+
+config.transformer.getTransformOptions = async () => ({
+ transform: {
+ experimentalImportSupport: false,
+ inlineRequires: true
+ }
+});
+
+if (workspaceRoot) {
+ // 1. Watch all files within the monorepo
+ config.watchFolders = [workspaceRoot];
+ // 2. Let Metro know where to resolve packages and in what order
+ config.resolver.nodeModulesPaths = [
+ path.resolve(projectRoot, 'node_modules'),
+ path.resolve(workspaceRoot, 'node_modules')
+ ];
+ // 3. Force Metro to resolve (sub)dependencies only from the `nodeModulesPaths`
+ config.resolver.disableHierarchicalLookup = true;
+}
+
+module.exports = config;
diff --git a/apps/tests/package.json b/apps/tests/package.json
new file mode 100644
index 000000000..e4594f5ba
--- /dev/null
+++ b/apps/tests/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "tests",
+ "version": "1.0.0",
+ "main": "index.js",
+ "scripts": {
+ "start": "expo start",
+ "android": "expo run:android",
+ "ios": "expo run:ios",
+ "test": "node scripts/test.js run"
+ },
+ "dependencies": {
+ "@azure/core-asynciterator-polyfill": "^1.0.2",
+ "@craftzdog/react-native-buffer": "^6.0.5",
+ "@journeyapps/powersync-sdk-react-native": "0.0.1",
+ "@journeyapps/react-native-quick-sqlite": "0.0.0-dev-20231030064733",
+ "base-64": "^1.0.0",
+ "chai": "^4.3.7",
+ "chance": "^1.1.9",
+ "events": "^3.3.0",
+ "expo": "~49.0.15",
+ "expo-splash-screen": "~0.20.5",
+ "expo-status-bar": "~1.6.0",
+ "mocha": "^10.1.0",
+ "nativewind": "^2.0.11",
+ "react": "18.2.0",
+ "react-native": "0.72.6",
+ "react-native-fetch-api": "^3.0.0",
+ "react-native-get-random-values": "~1.9.0",
+ "react-native-polyfill-globals": "^3.1.0",
+ "react-native-safe-area-context": "^4.5.0",
+ "react-native-url-polyfill": "^2.0.0",
+ "reflect-metadata": "^0.1.13",
+ "stream-browserify": "^3.0.0",
+ "tailwindcss": "^3.2.4",
+ "text-encoding": "^0.7.0",
+ "typeorm": "^0.3.11",
+ "util": "^0.12.5",
+ "web-streams-polyfill": "^3.2.1"
+ },
+ "devDependencies": {
+ "@babel/core": "^7.20.0",
+ "@babel/plugin-transform-async-generator-functions": "^7.23.2",
+ "@types/chai": "^4.3.4",
+ "@types/chance": "^1.1.3",
+ "@types/express": "^4.17.20",
+ "@types/mocha": "^10.0.1",
+ "@types/react": "~18.2.14",
+ "babel-plugin-module-resolver": "^4.1.0",
+ "body-parser": "^1.20.2",
+ "chalk": "4.1.2",
+ "commander": "^11.1.0",
+ "express": "^4.18.2",
+ "typescript": "^5.1.3"
+ },
+ "private": true
+}
diff --git a/apps/tests/scripts/test.js b/apps/tests/scripts/test.js
new file mode 100644
index 000000000..cae42ecc0
--- /dev/null
+++ b/apps/tests/scripts/test.js
@@ -0,0 +1,137 @@
+/**
+ * This scripts acts as a simple server to get test results from
+ * an Android simulator.
+ */
+
+const { spawn } = require('child_process');
+const express = require('express');
+const bodyParser = require('body-parser');
+const _ = require('lodash');
+const chalk = require('chalk');
+const { program } = require('commander');
+
+const DEFAULT_AVD_NAME = 'macOS-avd-x86_64-29';
+const DEFAULT_PORT = 4243;
+const TEST_TIMEOUT = 1_800_000; // 30 minutes
+
+program.name('Test Suite').description('Automates tests for React Native app based tests');
+
+program
+ .command('run')
+ .option(
+ '--avdName ',
+ 'The virtual android device name (the adb device name will be fetched from this)',
+ DEFAULT_AVD_NAME
+ )
+ .option('--port', 'Port to run Express HTTP server for getting results on.', DEFAULT_PORT)
+ .action(async (str, options) => {
+ const opts = options.opts();
+ const avdName = opts.avdName;
+ const deviceName = await getADBDeviceName(avdName);
+ if (!deviceName) {
+ throw new Error(`Could not find adb device with AVD name ${avdName}`);
+ }
+
+ const port = opts.port;
+ /** Expose the Express server on the Android device */
+ await spawnP('Reverse Port', `adb`, [`-s`, deviceName, `reverse`, `tcp:${port}`, `tcp:${port}`]);
+
+ /** Build and run the Expo app, don't await this, we will await a response. */
+ spawnP('Build Expo App', `yarn`, [`android`, `-d`, avdName]);
+
+ const app = express();
+ app.use(bodyParser.json());
+
+ const resultsPromise = new Promise((resolve, reject) => {
+ /**
+ * We can receive results from here
+ */
+ const timeout = setTimeout(() => {
+ reject(new Error('Test timed out'));
+ }, TEST_TIMEOUT);
+
+ app.post('/results', (req, res) => {
+ clearTimeout(timeout);
+ const results = req.body;
+ displayResults(results);
+ if (results.some((r) => r.type == 'incorrect')) {
+ reject(new Error('Not all tests have passed'));
+ } else {
+ resolve(results);
+ }
+
+ return res.send('Done');
+ });
+ });
+
+ /** Listen for results */
+ const server = app.listen(port);
+ await resultsPromise;
+ server.close();
+
+ console.log('Done with tests');
+ process.exit(0);
+ });
+
+program.parse();
+
+async function spawnP(tag, cmd, args = []) {
+ return new Promise((resolve, reject) => {
+ console.log(`Executing command: ${cmd} ${args.join(' ')}`);
+ const runner = spawn(cmd, args);
+ let stdout = '';
+ runner.stdout.on('data', (data) => {
+ console.log(`[${tag}]: ${data}`);
+ stdout += data;
+ });
+ runner.stderr.on('data', (data) => console.error(`[${tag}]: ${data}`));
+
+ runner.on('exit', (code) => {
+ if (!code) {
+ return resolve(stdout);
+ }
+ reject(new Error(`${cmd} failed with code ${code}`));
+ });
+ });
+}
+
+async function getADBDeviceName(avdName) {
+ const tag = 'Get ADB Device';
+ const devicesOutput = await spawnP(tag, 'adb', ['devices']);
+ const deviceNames = _.chain(devicesOutput.split('\n'))
+ .slice(1) // Remove output header
+ .map((line) => line.split('\t')[0]) // Get name column
+ .map((line) => line.trim()) // Omit empty results
+ .filter((line) => !!line)
+ .value();
+
+ // Need to check all devices for their AVD name
+ for (let deviceName of deviceNames) {
+ try {
+ const deviceAVDNameResponse = await spawnP(tag, `adb`, [`-s`, deviceName, `emu`, `avd`, `name`]);
+ const deviceAVDName = deviceAVDNameResponse.split('\n')[0].trim();
+ if (deviceAVDName == avdName) {
+ return deviceName; // This device has the specified AVD name
+ }
+ } catch (ex) {
+ console.warn(ex);
+ }
+ }
+}
+
+function displayResults(results) {
+ for (let result of results) {
+ switch (result.type) {
+ case 'grouping':
+ console.log(chalk.blue(`Group Test Results for: ${result.description}`));
+ break;
+ case 'correct':
+ console.log(chalk.green(`✅ ${result.description}`));
+ break;
+ case 'incorrect':
+ console.log(chalk.red(`❌ ${result.description}`));
+ console.log(chalk.red(result.errorMsg));
+ break;
+ }
+ }
+}
diff --git a/apps/tests/tests/index.ts b/apps/tests/tests/index.ts
new file mode 100644
index 000000000..a337519f6
--- /dev/null
+++ b/apps/tests/tests/index.ts
@@ -0,0 +1,2 @@
+export { runTests } from './mocha/MochaSetup';
+export { registerBaseTests } from './sqlite/rawQueries.spec';
diff --git a/apps/tests/tests/mocha/MochaRNAdapter.ts b/apps/tests/tests/mocha/MochaRNAdapter.ts
new file mode 100644
index 000000000..5c4c04544
--- /dev/null
+++ b/apps/tests/tests/mocha/MochaRNAdapter.ts
@@ -0,0 +1,54 @@
+import 'mocha';
+import type * as MochaTypes from 'mocha';
+
+export const rootSuite = new Mocha.Suite('') as MochaTypes.Suite;
+rootSuite.timeout(10 * 1000);
+
+let mochaContext = rootSuite;
+let only = false;
+
+export const clearTests = () => {
+ rootSuite.suites = [];
+ rootSuite.tests = [];
+ mochaContext = rootSuite;
+ only = false;
+};
+
+export const it = (
+ name: string,
+ f: MochaTypes.Func | MochaTypes.AsyncFunc,
+): void => {
+ if (!only) {
+ const test = new Mocha.Test(name, f);
+ mochaContext.addTest(test);
+ }
+};
+
+export const itOnly = (
+ name: string,
+ f: MochaTypes.Func | MochaTypes.AsyncFunc,
+): void => {
+ clearTests();
+ const test = new Mocha.Test(name, f);
+ mochaContext.addTest(test);
+ only = true;
+};
+
+export const describe = (name: string, f: () => void): void => {
+ const prevMochaContext = mochaContext;
+ mochaContext = new Mocha.Suite(
+ name,
+ prevMochaContext.ctx,
+ ) as MochaTypes.Suite;
+ prevMochaContext.addSuite(mochaContext);
+ f();
+ mochaContext = prevMochaContext;
+};
+
+export const beforeEach = (f: () => void): void => {
+ mochaContext.beforeEach(f);
+};
+
+export const beforeAll = (f: any) => {
+ mochaContext.beforeAll(f);
+};
diff --git a/apps/tests/tests/mocha/MochaSetup.ts b/apps/tests/tests/mocha/MochaSetup.ts
new file mode 100644
index 000000000..a8ae526a9
--- /dev/null
+++ b/apps/tests/tests/mocha/MochaSetup.ts
@@ -0,0 +1,65 @@
+import 'mocha';
+import type * as MochaTypes from 'mocha';
+// import type { RowItemType } from '../navigators/children/TestingScreen/RowItemType';
+import { clearTests, rootSuite } from './MochaRNAdapter';
+
+export async function runTests(...registrators: Array<() => void>) {
+ // testRegistrators: Array<() => void> = []
+ // console.log('setting up mocha');
+
+ const promise = new Promise((resolve) => {
+ const { EVENT_RUN_BEGIN, EVENT_RUN_END, EVENT_TEST_FAIL, EVENT_TEST_PASS, EVENT_SUITE_BEGIN, EVENT_SUITE_END } =
+ Mocha.Runner.constants;
+
+ clearTests();
+ const results: any[] = [];
+ var runner = new Mocha.Runner(rootSuite) as MochaTypes.Runner;
+
+ runner
+ .once(EVENT_RUN_BEGIN, () => {})
+ .on(EVENT_SUITE_BEGIN, (suite: MochaTypes.Suite) => {
+ const name = suite.title;
+ if (name !== '') {
+ results.push({
+ description: name,
+ key: Math.random().toString(),
+ type: 'grouping'
+ });
+ }
+ })
+ .on(EVENT_TEST_PASS, (test: MochaTypes.Runnable) => {
+ results.push({
+ description: test.title,
+ key: Math.random().toString(),
+ type: 'correct'
+ });
+ // console.log(`${indent()}pass: ${test.fullTitle()}`);
+ })
+ .on(EVENT_TEST_FAIL, (test: MochaTypes.Runnable, err: Error) => {
+ results.push({
+ description: test.title,
+ key: Math.random().toString(),
+ type: 'incorrect',
+ errorMsg: err.message
+ });
+ // console.log(
+ // `${indent()}fail: ${test.fullTitle()} - error: ${err.message}`
+ // );
+ })
+ .once(EVENT_RUN_END, () => {
+ resolve(results);
+ });
+
+ registrators.forEach((register) => {
+ register();
+ });
+ runner.run();
+ });
+
+ // return () => {
+ // console.log('aborting');
+ // runner.abort();
+ // };
+
+ return promise;
+}
diff --git a/apps/tests/tests/powersync/AppSchema.ts b/apps/tests/tests/powersync/AppSchema.ts
new file mode 100644
index 000000000..d86ef740a
--- /dev/null
+++ b/apps/tests/tests/powersync/AppSchema.ts
@@ -0,0 +1,25 @@
+import { Column, ColumnType, Index, IndexedColumn, Schema, Table } from '@journeyapps/powersync-sdk-react-native';
+
+export const AppSchema = new Schema([
+ new Table({
+ name: 'todos',
+ columns: [
+ new Column({ name: 'list_id', type: ColumnType.TEXT }),
+ new Column({ name: 'created_at', type: ColumnType.TEXT }),
+ new Column({ name: 'completed_at', type: ColumnType.TEXT }),
+ new Column({ name: 'description', type: ColumnType.TEXT }),
+ new Column({ name: 'completed', type: ColumnType.INTEGER }),
+ new Column({ name: 'created_by', type: ColumnType.TEXT }),
+ new Column({ name: 'completed_by', type: ColumnType.TEXT })
+ ],
+ indexes: [new Index({ name: 'list', columns: [new IndexedColumn({ name: 'list_id' })] })]
+ }),
+ new Table({
+ name: 'lists',
+ columns: [
+ new Column({ name: 'created_at', type: ColumnType.TEXT }),
+ new Column({ name: 'name', type: ColumnType.TEXT }),
+ new Column({ name: 'owner_id', type: ColumnType.TEXT })
+ ]
+ })
+]);
diff --git a/apps/tests/tests/powersync/MockOpenFactory.ts b/apps/tests/tests/powersync/MockOpenFactory.ts
new file mode 100644
index 000000000..9d02928f1
--- /dev/null
+++ b/apps/tests/tests/powersync/MockOpenFactory.ts
@@ -0,0 +1,8 @@
+import { AbstractPowerSyncDatabase, RNQSPowerSyncDatabaseOpenFactory } from '@journeyapps/powersync-sdk-react-native';
+import { MockedPowerSyncDB } from './MockedPowerSyncDB';
+
+export class MockOpenFactory extends RNQSPowerSyncDatabaseOpenFactory {
+ getInstance(): AbstractPowerSyncDatabase {
+ return new MockedPowerSyncDB(this.generateOptions());
+ }
+}
diff --git a/apps/tests/tests/powersync/MockedPowerSyncConnector.ts b/apps/tests/tests/powersync/MockedPowerSyncConnector.ts
new file mode 100644
index 000000000..facaa4323
--- /dev/null
+++ b/apps/tests/tests/powersync/MockedPowerSyncConnector.ts
@@ -0,0 +1,14 @@
+import { AbstractPowerSyncDatabase, PowerSyncBackendConnector } from '@journeyapps/powersync-sdk-react-native';
+
+export class MockedPowerSyncConnector implements PowerSyncBackendConnector {
+ constructor(protected dataUploader: () => Promise) {}
+ async fetchCredentials() {
+ return {
+ endpoint: '',
+ token: ''
+ };
+ }
+ async uploadData(database: AbstractPowerSyncDatabase) {
+ return this.dataUploader();
+ }
+}
diff --git a/apps/tests/tests/powersync/MockedPowerSyncDB.ts b/apps/tests/tests/powersync/MockedPowerSyncDB.ts
new file mode 100644
index 000000000..b3c76f64e
--- /dev/null
+++ b/apps/tests/tests/powersync/MockedPowerSyncDB.ts
@@ -0,0 +1,33 @@
+import {
+ AbstractPowerSyncDatabase,
+ AbstractStreamingSyncImplementation,
+ PowerSyncBackendConnector,
+ SqliteBucketStorage,
+ BucketStorageAdapter
+} from '@journeyapps/powersync-sdk-common';
+import { MockedPowerSyncRemote } from './MockedPowerSyncRemote';
+import { MockedStreamingSyncImplementation } from './MockedStreamingSyncImplementation';
+
+export class MockedPowerSyncDB extends AbstractPowerSyncDatabase {
+ async _init(): Promise {}
+
+ protected generateBucketStorageAdapter(): BucketStorageAdapter {
+ return new SqliteBucketStorage(this.database, AbstractPowerSyncDatabase.transactionMutex);
+ }
+
+ protected generateSyncStreamImplementation(
+ connector: PowerSyncBackendConnector
+ ): AbstractStreamingSyncImplementation {
+ const remote = new MockedPowerSyncRemote(connector);
+
+ return new MockedStreamingSyncImplementation({
+ adapter: this.bucketStorageAdapter,
+ remote,
+ uploadCrud: async () => {
+ await this.initialized;
+ await connector.uploadData(this);
+ },
+ retryDelayMs: this.options.retryDelay
+ });
+ }
+}
diff --git a/apps/tests/tests/powersync/MockedPowerSyncRemote.ts b/apps/tests/tests/powersync/MockedPowerSyncRemote.ts
new file mode 100644
index 000000000..86fd6f836
--- /dev/null
+++ b/apps/tests/tests/powersync/MockedPowerSyncRemote.ts
@@ -0,0 +1,23 @@
+import { AbstractRemote } from '@journeyapps/powersync-sdk-common';
+
+export class MockedPowerSyncRemote extends AbstractRemote {
+ async post(path: string, data: any, headers: Record = {}): Promise {
+ throw new Error('Not used in tests yet.');
+ }
+
+ async get(path: string, headers?: Record): Promise {
+ throw new Error('Not used in tests yet.');
+ }
+
+ /**
+ * This remote simply resolves an example streaming response
+ */
+ async postStreaming(
+ path: string,
+ data: any,
+ headers: Record = {},
+ signal?: AbortSignal
+ ): Promise {
+ throw new Error('Not used in tests yet');
+ }
+}
diff --git a/apps/tests/tests/powersync/MockedStreamingSyncImplementation.ts b/apps/tests/tests/powersync/MockedStreamingSyncImplementation.ts
new file mode 100644
index 000000000..3391aaf06
--- /dev/null
+++ b/apps/tests/tests/powersync/MockedStreamingSyncImplementation.ts
@@ -0,0 +1,33 @@
+import {
+ AbstractStreamingSyncImplementationOptions,
+ ReactNativeStreamingSyncImplementation,
+ StreamingSyncLine,
+ StreamingSyncRequest
+} from '@journeyapps/powersync-sdk-react-native';
+
+/**
+ * Mock PowerSync stream instance
+ */
+const PAYLOAD = `{"checkpoint":{"last_op_id":"833","write_checkpoint":"35","buckets":[{"bucket":"user_lists['57ff018e-5513-4f48-88a2-67a0c680bf29']","count":3,"checksum":2057128786},{"bucket":"user_lists['4430c1c3-a9ce-4a63-b0fd-ef99068a438b']","count":2,"checksum":1511966762}]}}
+{"data":{"bucket":"user_lists['57ff018e-5513-4f48-88a2-67a0c680bf29']","data":[{"op_id":"810","op":"PUT","object_type":"lists","object_id":"57ff018e-5513-4f48-88a2-67a0c680bf29","data":{"id":"57ff018e-5513-4f48-88a2-67a0c680bf29","created_at":"2023-10-26 15:23:08Z","name":"dsfsdfsdf","owner_id":"b1825946-ae3c-43df-96cd-40be659d2716"},"checksum":1939980745,"subkey":"64fb30600f072d6da30dca3b/ede75215-5446-5777-a363-17693eff82b8"},{"op_id":"816","op":"REMOVE","object_type":"lists","object_id":"57ff018e-5513-4f48-88a2-67a0c680bf29","data":null,"checksum":2472134592,"subkey":"64fb30600f072d6da30dca3b/ede75215-5446-5777-a363-17693eff82b8"},{"op_id":"820","op":"PUT","object_type":"lists","object_id":"57ff018e-5513-4f48-88a2-67a0c680bf29","data":{"id":"57ff018e-5513-4f48-88a2-67a0c680bf29","created_at":"2023-10-26 15:23:08Z","name":"dsfsdfsdf","owner_id":"b1825946-ae3c-43df-96cd-40be659d2716"},"checksum":1939980745,"subkey":"653f53386e95c062b049af89/ede75215-5446-5777-a363-17693eff82b8"}],"has_more":false,"after":"0","next_after":"820"}}
+{"data":{"bucket":"user_lists['4430c1c3-a9ce-4a63-b0fd-ef99068a438b']","data":[{"op_id":"822","op":"PUT","object_type":"lists","object_id":"4430c1c3-a9ce-4a63-b0fd-ef99068a438b","data":{"id":"4430c1c3-a9ce-4a63-b0fd-ef99068a438b","created_at":"2023-10-30 06:54:41Z","name":"dfdsfdsf","owner_id":"b1825946-ae3c-43df-96cd-40be659d2716"},"checksum":755983381,"subkey":"653f53386e95c062b049af89/e84c35f4-7c9c-56d8-8810-6dcb3ae242fe"},{"op_id":"826","op":"PUT","object_type":"lists","object_id":"4430c1c3-a9ce-4a63-b0fd-ef99068a438b","data":{"id":"4430c1c3-a9ce-4a63-b0fd-ef99068a438b","created_at":"2023-10-30 06:54:41Z","name":"dfdsfdsf","owner_id":"b1825946-ae3c-43df-96cd-40be659d2716"},"checksum":755983381,"subkey":"653f53386e95c062b049af89/e84c35f4-7c9c-56d8-8810-6dcb3ae242fe"}],"has_more":false,"after":"0","next_after":"826"}}
+{"checkpoint_complete":{"last_op_id":"833"}}
+{"token_expires_in":2321}`;
+
+const PAYLOAD_LINES = PAYLOAD.split('\n');
+
+export class MockedStreamingSyncImplementation extends ReactNativeStreamingSyncImplementation {
+ lineIndex: number;
+ constructor(options: AbstractStreamingSyncImplementationOptions) {
+ super(options);
+ this.lineIndex = 0;
+ }
+ async *streamingSyncRequest(req: StreamingSyncRequest, signal: AbortSignal): AsyncGenerator {
+ if (this.lineIndex >= PAYLOAD_LINES.length) {
+ return;
+ }
+ const line = PAYLOAD_LINES[this.lineIndex++];
+ const value = JSON.parse(line);
+ yield value;
+ }
+}
diff --git a/apps/tests/tests/sqlite/rawQueries.spec.ts b/apps/tests/tests/sqlite/rawQueries.spec.ts
new file mode 100644
index 000000000..5c67e66ed
--- /dev/null
+++ b/apps/tests/tests/sqlite/rawQueries.spec.ts
@@ -0,0 +1,47 @@
+import Chance from 'chance';
+import { beforeEach, describe, it } from '../mocha/MochaRNAdapter';
+import chai from 'chai';
+import { AbstractPowerSyncDatabase, QueryResult } from '@journeyapps/powersync-sdk-react-native';
+import { MockedPowerSyncConnector } from '../powersync/MockedPowerSyncConnector';
+import { AppSchema } from '../powersync/AppSchema';
+import { MockOpenFactory } from '../powersync/MockOpenFactory';
+
+const { expect } = chai;
+const chance = new Chance();
+
+// Need to store the db on the global state since this variable will be cleared on hot reload,
+// Attempting to open an already open DB results in an error.
+let powersync: AbstractPowerSyncDatabase;
+
+export function registerBaseTests() {
+ beforeEach(async () => {
+ try {
+ if (powersync) {
+ await powersync.disconnectAndClear();
+ } else {
+ const factory = new MockOpenFactory({ dbFilename: 'testdd.db', schema: AppSchema });
+ powersync = factory.getInstance();
+ await powersync.init();
+ }
+ await powersync.connect(new MockedPowerSyncConnector(async () => {}));
+ } catch (e) {
+ console.warn('error on before each', e);
+ }
+ });
+
+ describe('Syncing', () => {
+ it('Should download data', async () => {
+ const res = await new Promise(async (resolve, reject) => {
+ const abort = new AbortController();
+ for await (const res of powersync.watch('SELECT * FROM lists', [], { signal: abort.signal })) {
+ console.log('res', res);
+ if (res.rows?.length > 0) {
+ resolve(res);
+ abort.abort();
+ }
+ }
+ });
+ expect(res.rows?.length).to.greaterThan(0);
+ });
+ });
+}
diff --git a/apps/tests/tsconfig.json b/apps/tests/tsconfig.json
new file mode 100644
index 000000000..7d55f1f55
--- /dev/null
+++ b/apps/tests/tsconfig.json
@@ -0,0 +1,12 @@
+{
+ "extends": "./node_modules/expo/tsconfig.base",
+ "compilerOptions": {
+ "skipLibCheck": true,
+ "paths": {
+ "react-native-quick-sqlite": ["../src/index"]
+ },
+ "allowSyntheticDefaultImports": true,
+ "emitDecoratorMetadata": true,
+ "experimentalDecorators": true
+ }
+}
diff --git a/packages/powersync-sdk-common/src/client/sync/stream/AbstractStreamingSyncImplementation.ts b/packages/powersync-sdk-common/src/client/sync/stream/AbstractStreamingSyncImplementation.ts
index 2dd7fa8ce..2b1559e36 100644
--- a/packages/powersync-sdk-common/src/client/sync/stream/AbstractStreamingSyncImplementation.ts
+++ b/packages/powersync-sdk-common/src/client/sync/stream/AbstractStreamingSyncImplementation.ts
@@ -162,6 +162,7 @@ export abstract class AbstractStreamingSyncImplementation extends BaseObserver(bucketSet);
@@ -272,11 +273,11 @@ export abstract class AbstractStreamingSyncImplementation extends BaseObserver= 2.1.2 < 3.0.0"
-ieee754@^1.1.13:
+ieee754@^1.1.13, ieee754@^1.2.1:
version "1.2.1"
resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
@@ -6119,7 +6964,7 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
-inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3:
+inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@~2.0.4:
version "2.0.4"
resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@@ -6202,11 +7047,19 @@ ip@^2.0.0:
resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da"
integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==
-ipaddr.js@^1.9.0:
+ipaddr.js@1.9.1, ipaddr.js@^1.9.0:
version "1.9.1"
resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
+is-arguments@^1.0.4:
+ version "1.1.1"
+ resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b"
+ integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==
+ dependencies:
+ call-bind "^1.0.2"
+ has-tostringtag "^1.0.0"
+
is-array-buffer@^3.0.1, is-array-buffer@^3.0.2:
version "3.0.2"
resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe"
@@ -6233,6 +7086,13 @@ is-bigint@^1.0.1:
dependencies:
has-bigints "^1.0.1"
+is-binary-path@~2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+ integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+ dependencies:
+ binary-extensions "^2.0.0"
+
is-boolean-object@^1.1.0:
version "1.1.2"
resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719"
@@ -6302,6 +7162,13 @@ is-fullwidth-code-point@^3.0.0:
resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+is-generator-function@^1.0.7:
+ version "1.0.10"
+ resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72"
+ integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==
+ dependencies:
+ has-tostringtag "^1.0.0"
+
is-glob@^2.0.0:
version "2.0.1"
resolved "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
@@ -6309,7 +7176,7 @@ is-glob@^2.0.0:
dependencies:
is-extglob "^1.0.0"
-is-glob@^4.0.1:
+is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
version "4.0.3"
resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
@@ -6370,6 +7237,11 @@ is-plain-obj@^1.0.0, is-plain-obj@^1.1.0:
resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==
+is-plain-obj@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
+ integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
+
is-plain-object@^2.0.4:
version "2.0.4"
resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
@@ -6452,7 +7324,7 @@ is-text-path@^1.0.1:
dependencies:
text-extensions "^1.0.0"
-is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9:
+is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.3, is-typed-array@^1.1.9:
version "1.1.12"
resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a"
integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==
@@ -6645,6 +7517,11 @@ jimp-compact@0.16.1:
resolved "https://registry.npmjs.org/jimp-compact/-/jimp-compact-0.16.1.tgz#9582aea06548a2c1e04dd148d7c3ab92075aefa3"
integrity sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==
+jiti@^1.19.1:
+ version "1.20.0"
+ resolved "https://registry.npmjs.org/jiti/-/jiti-1.20.0.tgz#2d823b5852ee8963585c8dd8b7992ffc1ae83b42"
+ integrity sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==
+
joi@^17.2.1:
version "17.10.0"
resolved "https://registry.npmjs.org/joi/-/joi-17.10.0.tgz#04e249daa24d48fada2d34046a8262e474b1326f"
@@ -6770,6 +7647,11 @@ json-stringify-safe@^5.0.1:
resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==
+json5@^0.5.1:
+ version "0.5.1"
+ resolved "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
+ integrity sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==
+
json5@^2.1.1, json5@^2.2.2, json5@^2.2.3:
version "2.2.3"
resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
@@ -6980,6 +7862,11 @@ lightningcss@~1.19.0:
lightningcss-linux-x64-musl "1.19.0"
lightningcss-win32-x64-msvc "1.19.0"
+lilconfig@^2.0.5, lilconfig@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52"
+ integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==
+
lines-and-columns@^1.1.6:
version "1.2.4"
resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
@@ -7080,14 +7967,7 @@ lodash@^4.17.13, lodash@^4.17.15, lodash@^4.17.21, lodash@^4.17.4:
resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
-log-symbols@^2.2.0:
- version "2.2.0"
- resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"
- integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==
- dependencies:
- chalk "^2.0.1"
-
-log-symbols@^4.1.0:
+log-symbols@4.1.0, log-symbols@^4.1.0:
version "4.1.0"
resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
@@ -7095,6 +7975,13 @@ log-symbols@^4.1.0:
chalk "^4.1.0"
is-unicode-supported "^0.1.0"
+log-symbols@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"
+ integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==
+ dependencies:
+ chalk "^2.0.1"
+
logkitty@^0.7.1:
version "0.7.1"
resolved "https://registry.npmjs.org/logkitty/-/logkitty-0.7.1.tgz#8e8d62f4085a826e8d38987722570234e33c6aa7"
@@ -7111,6 +7998,13 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0:
dependencies:
js-tokens "^3.0.0 || ^4.0.0"
+loupe@^2.3.6:
+ version "2.3.7"
+ resolved "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697"
+ integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==
+ dependencies:
+ get-func-name "^2.0.1"
+
lru-cache@^4.0.1:
version "4.1.5"
resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
@@ -7275,6 +8169,11 @@ meow@^8.1.2:
type-fest "^0.18.0"
yargs-parser "^20.2.3"
+merge-descriptors@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
+ integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==
+
merge-stream@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
@@ -7285,6 +8184,11 @@ merge2@^1.3.0, merge2@^1.4.1:
resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+methods@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
+ integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==
+
metro-babel-transformer@0.76.7:
version "0.76.7"
resolved "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.76.7.tgz#ba620d64cbaf97d1aa14146d654a3e5d7477fc62"
@@ -7562,6 +8466,17 @@ metro-react-native-babel-transformer@0.76.7:
metro-react-native-babel-preset "0.76.7"
nullthrows "^1.1.1"
+metro-react-native-babel-transformer@0.76.8:
+ version "0.76.8"
+ resolved "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.76.8.tgz#c3a98e1f4cd5faf1e21eba8e004b94a90c4db69b"
+ integrity sha512-3h+LfS1WG1PAzhq8QF0kfXjxuXetbY/lgz8vYMQhgrMMp17WM1DNJD0gjx8tOGYbpbBC1qesJ45KMS4o5TA73A==
+ dependencies:
+ "@babel/core" "^7.20.0"
+ babel-preset-fbjs "^3.4.0"
+ hermes-parser "0.12.0"
+ metro-react-native-babel-preset "0.76.8"
+ nullthrows "^1.1.1"
+
metro-resolver@0.76.7:
version "0.76.7"
resolved "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.76.7.tgz#f00ebead64e451c060f30926ecbf4f797588df52"
@@ -7806,7 +8721,7 @@ metro@0.76.8, metro@~0.76.7:
ws "^7.5.1"
yargs "^17.6.2"
-micromatch@^4.0.2, micromatch@^4.0.4:
+micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5:
version "4.0.5"
resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
@@ -7865,6 +8780,13 @@ minimatch@3.0.5:
dependencies:
brace-expansion "^1.1.7"
+minimatch@5.0.1:
+ version "5.0.1"
+ resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b"
+ integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==
+ dependencies:
+ brace-expansion "^2.0.1"
+
minimatch@^5.0.1:
version "5.1.6"
resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96"
@@ -8001,6 +8923,11 @@ mkdirp@^1.0.3, mkdirp@^1.0.4:
resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
+mkdirp@^2.1.3:
+ version "2.1.6"
+ resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz#964fbcb12b2d8c5d6fbc62a963ac95a273e2cc19"
+ integrity sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==
+
mobx-react-lite@^4.0.4:
version "4.0.4"
resolved "https://registry.npmjs.org/mobx-react-lite/-/mobx-react-lite-4.0.4.tgz#eee3c55dfa6841365d5a7764971c456db12570fb"
@@ -8013,6 +8940,33 @@ mobx@^6.10.2:
resolved "https://registry.npmjs.org/mobx/-/mobx-6.10.2.tgz#96e123deef140750360ca9a5b02a8b91fbffd4d9"
integrity sha512-B1UGC3ieK3boCjnMEcZSwxqRDMdzX65H/8zOHbuTY8ZhvrIjTUoLRR2TP2bPqIgYRfb3+dUigu8yMZufNjn0LQ==
+mocha@^10.1.0:
+ version "10.2.0"
+ resolved "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8"
+ integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==
+ dependencies:
+ ansi-colors "4.1.1"
+ browser-stdout "1.3.1"
+ chokidar "3.5.3"
+ debug "4.3.4"
+ diff "5.0.0"
+ escape-string-regexp "4.0.0"
+ find-up "5.0.0"
+ glob "7.2.0"
+ he "1.2.0"
+ js-yaml "4.1.0"
+ log-symbols "4.1.0"
+ minimatch "5.0.1"
+ ms "2.1.3"
+ nanoid "3.3.3"
+ serialize-javascript "6.0.0"
+ strip-json-comments "3.1.1"
+ supports-color "8.1.1"
+ workerpool "6.2.1"
+ yargs "16.2.0"
+ yargs-parser "20.2.4"
+ yargs-unparser "2.0.0"
+
modify-values@^1.0.1:
version "1.0.1"
resolved "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022"
@@ -8063,7 +9017,7 @@ mv@~2:
ncp "~2.0.0"
rimraf "~2.4.0"
-mz@^2.7.0:
+mz@^2.4.0, mz@^2.7.0:
version "2.7.0"
resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==
@@ -8072,11 +9026,35 @@ mz@^2.7.0:
object-assign "^4.0.1"
thenify-all "^1.0.0"
+nanoid@3.3.3:
+ version "3.3.3"
+ resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25"
+ integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==
+
nanoid@^3.1.23, nanoid@^3.3.6:
version "3.3.6"
resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c"
integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==
+nativewind@^2.0.11:
+ version "2.0.11"
+ resolved "https://registry.npmjs.org/nativewind/-/nativewind-2.0.11.tgz#aaa80a65b663a49856b26bd4f3153161f70299d7"
+ integrity sha512-qCEXUwKW21RYJ33KRAJl3zXq2bCq82WoI564fI21D/TiqhfmstZOqPN53RF8qK1NDK6PGl56b2xaTxgObEePEg==
+ dependencies:
+ "@babel/generator" "^7.18.7"
+ "@babel/helper-module-imports" "7.18.6"
+ "@babel/types" "7.19.0"
+ css-mediaquery "^0.1.2"
+ css-to-react-native "^3.0.0"
+ micromatch "^4.0.5"
+ postcss "^8.4.12"
+ postcss-calc "^8.2.4"
+ postcss-color-functional-notation "^4.2.2"
+ postcss-css-variables "^0.18.0"
+ postcss-nested "^5.0.6"
+ react-is "^18.1.0"
+ use-sync-external-store "^1.1.0"
+
ncp@~2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3"
@@ -8227,7 +9205,7 @@ normalize-package-data@^5.0.0:
semver "^7.3.5"
validate-npm-package-license "^3.0.4"
-normalize-path@^3.0.0:
+normalize-path@^3.0.0, normalize-path@~3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
@@ -8760,6 +9738,23 @@ parse-url@^8.1.0:
dependencies:
parse-path "^7.0.0"
+parse5-htmlparser2-tree-adapter@^6.0.0:
+ version "6.0.1"
+ resolved "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6"
+ integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==
+ dependencies:
+ parse5 "^6.0.1"
+
+parse5@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178"
+ integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==
+
+parse5@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
+ integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
+
parseurl@~1.3.3:
version "1.3.3"
resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
@@ -8816,6 +9811,11 @@ path-scurry@^1.10.1, path-scurry@^1.6.1:
lru-cache "^9.1.1 || ^10.0.0"
minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
+path-to-regexp@0.1.7:
+ version "0.1.7"
+ resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
+ integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==
+
path-type@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
@@ -8828,12 +9828,17 @@ path-type@^4.0.0:
resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+pathval@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d"
+ integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==
+
picocolors@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
-picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1:
+picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1:
version "2.3.1"
resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
@@ -8898,6 +9903,90 @@ pngjs@^3.3.0:
resolved "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f"
integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==
+postcss-calc@^8.2.4:
+ version "8.2.4"
+ resolved "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5"
+ integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==
+ dependencies:
+ postcss-selector-parser "^6.0.9"
+ postcss-value-parser "^4.2.0"
+
+postcss-color-functional-notation@^4.2.2:
+ version "4.2.4"
+ resolved "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz#21a909e8d7454d3612d1659e471ce4696f28caec"
+ integrity sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==
+ dependencies:
+ postcss-value-parser "^4.2.0"
+
+postcss-css-variables@^0.18.0:
+ version "0.18.0"
+ resolved "https://registry.npmjs.org/postcss-css-variables/-/postcss-css-variables-0.18.0.tgz#d97b6da19e86245eb817006e11117382f997bb93"
+ integrity sha512-lYS802gHbzn1GI+lXvy9MYIYDuGnl1WB4FTKoqMQqJ3Mab09A7a/1wZvGTkCEZJTM8mSbIyb1mJYn8f0aPye0Q==
+ dependencies:
+ balanced-match "^1.0.0"
+ escape-string-regexp "^1.0.3"
+ extend "^3.0.1"
+
+postcss-import@^15.1.0:
+ version "15.1.0"
+ resolved "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70"
+ integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==
+ dependencies:
+ postcss-value-parser "^4.0.0"
+ read-cache "^1.0.0"
+ resolve "^1.1.7"
+
+postcss-js@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2"
+ integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==
+ dependencies:
+ camelcase-css "^2.0.1"
+
+postcss-load-config@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz#152383f481c2758274404e4962743191d73875bd"
+ integrity sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==
+ dependencies:
+ lilconfig "^2.0.5"
+ yaml "^2.1.1"
+
+postcss-nested@^5.0.6:
+ version "5.0.6"
+ resolved "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz#466343f7fc8d3d46af3e7dba3fcd47d052a945bc"
+ integrity sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==
+ dependencies:
+ postcss-selector-parser "^6.0.6"
+
+postcss-nested@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz#f83dc9846ca16d2f4fa864f16e9d9f7d0961662c"
+ integrity sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==
+ dependencies:
+ postcss-selector-parser "^6.0.11"
+
+postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.6, postcss-selector-parser@^6.0.9:
+ version "6.0.13"
+ resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b"
+ integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==
+ dependencies:
+ cssesc "^3.0.0"
+ util-deprecate "^1.0.2"
+
+postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
+ integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
+
+postcss@^8.4.12, postcss@^8.4.23:
+ version "8.4.31"
+ resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d"
+ integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==
+ dependencies:
+ nanoid "^3.3.6"
+ picocolors "^1.0.0"
+ source-map-js "^1.0.2"
+
postcss@~8.4.21:
version "8.4.28"
resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.28.tgz#c6cc681ed00109072816e1557f889ef51cf950a5"
@@ -9026,6 +10115,14 @@ protocols@^2.0.0, protocols@^2.0.1:
resolved "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86"
integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==
+proxy-addr@~2.0.7:
+ version "2.0.7"
+ resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
+ integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==
+ dependencies:
+ forwarded "0.2.0"
+ ipaddr.js "1.9.1"
+
proxy-from-env@^1.1.0:
version "1.1.0"
resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
@@ -9105,11 +10202,28 @@ quick-lru@^4.0.1:
resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f"
integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==
+randombytes@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+ integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+ dependencies:
+ safe-buffer "^5.1.0"
+
range-parser@~1.2.1:
version "1.2.1"
resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
+raw-body@2.5.1:
+ version "2.5.1"
+ resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857"
+ integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==
+ dependencies:
+ bytes "3.1.2"
+ http-errors "2.0.0"
+ iconv-lite "0.4.24"
+ unpipe "1.0.0"
+
raw-body@2.5.2:
version "2.5.2"
resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a"
@@ -9159,7 +10273,7 @@ react-helmet-async@^1.3.0:
react-fast-compare "^3.2.0"
shallowequal "^1.1.0"
-"react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0:
+"react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0, react-is@^18.1.0:
version "18.2.0"
resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b"
integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==
@@ -9233,6 +10347,13 @@ react-native-prompt-android@^1.1.0:
resolved "https://registry.npmjs.org/react-native-prompt-android/-/react-native-prompt-android-1.1.0.tgz#3c5168029075cb9f72549fd5f92403372fb234e9"
integrity sha512-4JoyEaT2ZnK9IH+tDFpbTiQBgva8UIFGQf4/Uw/tnEVWBERlVlzcs5B82T9BkeEhEqXhp89JaiSBnLWj30lciw==
+react-native-quick-base64@^2.0.5:
+ version "2.0.7"
+ resolved "https://registry.npmjs.org/react-native-quick-base64/-/react-native-quick-base64-2.0.7.tgz#70ec863fb5dba8cd858a262f6b901dbbfbfdd3df"
+ integrity sha512-QmOon3zXAWFi3KvQVCJjCC7N66rwfl1R4nLPuJ+OVs8nWysvKlaU8mKxe2BV4Ud1nB3nTDgyi2VCJFpjtjJxKw==
+ dependencies:
+ base64-js "^1.5.1"
+
react-native-ratings@8.0.4:
version "8.0.4"
resolved "https://registry.npmjs.org/react-native-ratings/-/react-native-ratings-8.0.4.tgz#efd5ebad8acc08bf98d34d39b18fb7a6813ef991"
@@ -9255,6 +10376,11 @@ react-native-safe-area-context@4.6.3:
resolved "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.6.3.tgz#f06cfea05b1c4b018aa9758667a109f619c62b55"
integrity sha512-3CeZM9HFXkuqiU9HqhOQp1yxhXw6q99axPWrT+VJkITd67gnPSU03+U27Xk2/cr9XrLUnakM07kj7H0hdPnFiQ==
+react-native-safe-area-context@^4.5.0:
+ version "4.7.4"
+ resolved "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.7.4.tgz#3dd8438971e70043d76f2428ede75b8a9639265e"
+ integrity sha512-3LR3DCq9pdzlbq6vsHGWBFehXAKDh2Ljug6jWhLWs1QFuJHM6AS2+mH2JfKlB2LqiSFZOBcZfHQFz0sGaA3uqg==
+
react-native-safe-area-view@^1.1.1:
version "1.1.1"
resolved "https://registry.npmjs.org/react-native-safe-area-view/-/react-native-safe-area-view-1.1.1.tgz#9833e34c384d0513f4831afcd1e54946f13897b2"
@@ -9337,6 +10463,48 @@ react-native@0.72.4:
ws "^6.2.2"
yargs "^17.6.2"
+react-native@0.72.6:
+ version "0.72.6"
+ resolved "https://registry.npmjs.org/react-native/-/react-native-0.72.6.tgz#9f8d090694907e2f83af22e115cc0e4a3d5fa626"
+ integrity sha512-RafPY2gM7mcrFySS8TL8x+TIO3q7oAlHpzEmC7Im6pmXni6n1AuufGaVh0Narbr1daxstw7yW7T9BKW5dpVc2A==
+ dependencies:
+ "@jest/create-cache-key-function" "^29.2.1"
+ "@react-native-community/cli" "11.3.7"
+ "@react-native-community/cli-platform-android" "11.3.7"
+ "@react-native-community/cli-platform-ios" "11.3.7"
+ "@react-native/assets-registry" "^0.72.0"
+ "@react-native/codegen" "^0.72.7"
+ "@react-native/gradle-plugin" "^0.72.11"
+ "@react-native/js-polyfills" "^0.72.1"
+ "@react-native/normalize-colors" "^0.72.0"
+ "@react-native/virtualized-lists" "^0.72.8"
+ abort-controller "^3.0.0"
+ anser "^1.4.9"
+ base64-js "^1.1.2"
+ deprecated-react-native-prop-types "4.1.0"
+ event-target-shim "^5.0.1"
+ flow-enums-runtime "^0.0.5"
+ invariant "^2.2.4"
+ jest-environment-node "^29.2.1"
+ jsc-android "^250231.0.0"
+ memoize-one "^5.0.0"
+ metro-runtime "0.76.8"
+ metro-source-map "0.76.8"
+ mkdirp "^0.5.1"
+ nullthrows "^1.1.1"
+ pretty-format "^26.5.2"
+ promise "^8.3.0"
+ react-devtools-core "^4.27.2"
+ react-refresh "^0.4.0"
+ react-shallow-renderer "^16.15.0"
+ regenerator-runtime "^0.13.2"
+ scheduler "0.24.0-canary-efb381bbf-20230505"
+ stacktrace-parser "^0.1.10"
+ use-sync-external-store "^1.0.0"
+ whatwg-fetch "^3.0.0"
+ ws "^6.2.2"
+ yargs "^17.6.2"
+
react-navigation-stack@^2.10.4:
version "2.10.4"
resolved "https://registry.npmjs.org/react-navigation-stack/-/react-navigation-stack-2.10.4.tgz#377fd6533f8ae0cf5ca5a435a0115851f010306a"
@@ -9365,6 +10533,13 @@ react@18.2.0:
dependencies:
loose-envify "^1.1.0"
+read-cache@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774"
+ integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==
+ dependencies:
+ pify "^2.3.0"
+
read-cmd-shim@4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz#640a08b473a49043e394ae0c7a34dd822c73b9bb"
@@ -9441,7 +10616,7 @@ read@^2.0.0:
dependencies:
mute-stream "~1.0.0"
-readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0:
+readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0:
version "3.6.2"
resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
@@ -9463,6 +10638,13 @@ readable-stream@~2.3.6:
string_decoder "~1.1.1"
util-deprecate "~1.0.1"
+readdirp@~3.6.0:
+ version "3.6.0"
+ resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
+ integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
+ dependencies:
+ picomatch "^2.2.1"
+
readline@^1.3.0:
version "1.3.0"
resolved "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz#c580d77ef2cfc8752b132498060dc9793a7ac01c"
@@ -9486,6 +10668,11 @@ redent@^3.0.0:
indent-string "^4.0.0"
strip-indent "^3.0.0"
+reflect-metadata@^0.1.13:
+ version "0.1.13"
+ resolved "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08"
+ integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==
+
regenerate-unicode-properties@^10.1.0:
version "10.1.0"
resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c"
@@ -9577,7 +10764,7 @@ requires-port@^1.0.0:
resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==
-reselect@^4.1.7:
+reselect@^4.0.0, reselect@^4.1.7:
version "4.1.8"
resolved "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz#3f5dc671ea168dccdeb3e141236f69f02eaec524"
integrity sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==
@@ -9604,6 +10791,15 @@ resolve-from@^4.0.0:
resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+resolve@^1.1.7, resolve@^1.13.1, resolve@^1.22.2:
+ version "1.22.8"
+ resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d"
+ integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
+ dependencies:
+ is-core-module "^2.13.0"
+ path-parse "^1.0.7"
+ supports-preserve-symlinks-flag "^1.0.0"
+
resolve@^1.10.0:
version "1.22.6"
resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz#dd209739eca3aef739c626fea1b4f3c506195362"
@@ -9724,7 +10920,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-safe-buffer@~5.2.0:
+safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0:
version "5.2.1"
resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
@@ -9830,7 +11026,14 @@ serialize-error@^2.1.0:
resolved "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz#50b679d5635cdf84667bdc8e59af4e5b81d5f60a"
integrity sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==
-serve-static@^1.13.1:
+serialize-javascript@6.0.0:
+ version "6.0.0"
+ resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8"
+ integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==
+ dependencies:
+ randombytes "^2.1.0"
+
+serve-static@1.15.0, serve-static@^1.13.1:
version "1.15.0"
resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540"
integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==
@@ -9845,6 +11048,16 @@ set-blocking@^2.0.0:
resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==
+set-function-length@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed"
+ integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==
+ dependencies:
+ define-data-property "^1.1.1"
+ get-intrinsic "^1.2.1"
+ gopd "^1.0.1"
+ has-property-descriptors "^1.0.0"
+
set-function-name@^2.0.0:
version "2.0.1"
resolved "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a"
@@ -9864,6 +11077,14 @@ setprototypeof@1.2.0:
resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
+sha.js@^2.4.11:
+ version "2.4.11"
+ resolved "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
+ integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
shallow-clone@^3.0.0:
version "3.0.1"
resolved "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3"
@@ -10152,6 +11373,14 @@ statuses@~1.5.0:
resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==
+stream-browserify@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f"
+ integrity sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==
+ dependencies:
+ inherits "~2.0.4"
+ readable-stream "^3.5.0"
+
stream-buffers@2.2.x:
version "2.2.0"
resolved "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4"
@@ -10276,6 +11505,11 @@ strip-indent@^3.0.0:
dependencies:
min-indent "^1.0.0"
+strip-json-comments@3.1.1:
+ version "3.1.1"
+ resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
+ integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+
strip-json-comments@~2.0.1:
version "2.0.1"
resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
@@ -10300,7 +11534,7 @@ structured-headers@^0.4.1:
resolved "https://registry.npmjs.org/structured-headers/-/structured-headers-0.4.1.tgz#77abd9410622c6926261c09b9d16cf10592694d1"
integrity sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg==
-sucrase@^3.20.0:
+sucrase@^3.20.0, sucrase@^3.32.0:
version "3.34.0"
resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz#1e0e2d8fcf07f8b9c3569067d92fbd8690fb576f"
integrity sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==
@@ -10328,6 +11562,13 @@ sudo-prompt@^9.0.0:
resolved "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz#77efb84309c9ca489527a4e749f287e6bdd52afd"
integrity sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==
+supports-color@8.1.1, supports-color@^8.0.0:
+ version "8.1.1"
+ resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
+ integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
+ dependencies:
+ has-flag "^4.0.0"
+
supports-color@^5.3.0:
version "5.5.0"
resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
@@ -10342,13 +11583,6 @@ supports-color@^7.0.0, supports-color@^7.1.0:
dependencies:
has-flag "^4.0.0"
-supports-color@^8.0.0:
- version "8.1.1"
- resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
- integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
- dependencies:
- has-flag "^4.0.0"
-
supports-hyperlinks@^2.0.0:
version "2.3.0"
resolved "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624"
@@ -10362,6 +11596,34 @@ supports-preserve-symlinks-flag@^1.0.0:
resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+tailwindcss@^3.2.4:
+ version "3.3.5"
+ resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.5.tgz#22a59e2fbe0ecb6660809d9cc5f3976b077be3b8"
+ integrity sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==
+ dependencies:
+ "@alloc/quick-lru" "^5.2.0"
+ arg "^5.0.2"
+ chokidar "^3.5.3"
+ didyoumean "^1.2.2"
+ dlv "^1.1.3"
+ fast-glob "^3.3.0"
+ glob-parent "^6.0.2"
+ is-glob "^4.0.3"
+ jiti "^1.19.1"
+ lilconfig "^2.1.0"
+ micromatch "^4.0.5"
+ normalize-path "^3.0.0"
+ object-hash "^3.0.0"
+ picocolors "^1.0.0"
+ postcss "^8.4.23"
+ postcss-import "^15.1.0"
+ postcss-js "^4.0.1"
+ postcss-load-config "^4.0.1"
+ postcss-nested "^6.0.1"
+ postcss-selector-parser "^6.0.11"
+ resolve "^1.22.2"
+ sucrase "^3.32.0"
+
tar-stream@~2.2.0:
version "2.2.0"
resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287"
@@ -10581,7 +11843,7 @@ tsconfig-paths@^4.1.2:
minimist "^1.2.6"
strip-bom "^3.0.0"
-tslib@^2.0.1, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0:
+tslib@^2.0.1, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0, tslib@^2.5.0:
version "2.6.2"
resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
@@ -10608,7 +11870,7 @@ tuf-js@^1.1.7:
debug "^4.3.4"
make-fetch-happen "^11.1.1"
-type-detect@4.0.8:
+type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.8:
version "4.0.8"
resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
@@ -10732,6 +11994,27 @@ typedarray@^0.0.6:
resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==
+typeorm@^0.3.11:
+ version "0.3.17"
+ resolved "https://registry.npmjs.org/typeorm/-/typeorm-0.3.17.tgz#a73c121a52e4fbe419b596b244777be4e4b57949"
+ integrity sha512-UDjUEwIQalO9tWw9O2A4GU+sT3oyoUXheHJy4ft+RFdnRdQctdQ34L9SqE2p7LdwzafHx1maxT+bqXON+Qnmig==
+ dependencies:
+ "@sqltools/formatter" "^1.2.5"
+ app-root-path "^3.1.0"
+ buffer "^6.0.3"
+ chalk "^4.1.2"
+ cli-highlight "^2.1.11"
+ date-fns "^2.29.3"
+ debug "^4.3.4"
+ dotenv "^16.0.3"
+ glob "^8.1.0"
+ mkdirp "^2.1.3"
+ reflect-metadata "^0.1.13"
+ sha.js "^2.4.11"
+ tslib "^2.5.0"
+ uuid "^9.0.0"
+ yargs "^17.6.2"
+
"typescript@>=3 < 6", typescript@^5.1.3:
version "5.2.2"
resolved "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78"
@@ -10906,7 +12189,7 @@ use-latest-callback@^0.1.5:
resolved "https://registry.npmjs.org/use-latest-callback/-/use-latest-callback-0.1.6.tgz#3fa6e7babbb5f9bfa24b5094b22939e1e92ebcf6"
integrity sha512-VO/P91A/PmKH9bcN9a7O3duSuxe6M14ZoYXgA6a8dab8doWNdhiIHzEkX/jFeTTRBsX0Ubk6nG4q2NIjNsj+bg==
-use-sync-external-store@^1.0.0, use-sync-external-store@^1.2.0:
+use-sync-external-store@^1.0.0, use-sync-external-store@^1.1.0, use-sync-external-store@^1.2.0:
version "1.2.0"
resolved "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a"
integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==
@@ -10918,11 +12201,22 @@ utf-8-validate@^5.0.2:
dependencies:
node-gyp-build "^4.3.0"
-util-deprecate@^1.0.1, util-deprecate@~1.0.1:
+util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
+util@^0.12.5:
+ version "0.12.5"
+ resolved "https://registry.npmjs.org/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc"
+ integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==
+ dependencies:
+ inherits "^2.0.3"
+ is-arguments "^1.0.4"
+ is-generator-function "^1.0.7"
+ is-typed-array "^1.1.3"
+ which-typed-array "^1.1.2"
+
utils-merge@1.0.1:
version "1.0.1"
resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
@@ -11093,6 +12387,17 @@ which-typed-array@^1.1.11:
gopd "^1.0.1"
has-tostringtag "^1.0.0"
+which-typed-array@^1.1.2:
+ version "1.1.13"
+ resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36"
+ integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==
+ dependencies:
+ available-typed-arrays "^1.0.5"
+ call-bind "^1.0.4"
+ for-each "^0.3.3"
+ gopd "^1.0.1"
+ has-tostringtag "^1.0.0"
+
which@^1.2.9:
version "1.3.1"
resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
@@ -11136,6 +12441,11 @@ wordwrap@^1.0.0:
resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==
+workerpool@6.2.1:
+ version "6.2.1"
+ resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343"
+ integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==
+
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
version "7.0.0"
resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
@@ -11289,6 +12599,11 @@ yallist@^4.0.0:
resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+yaml@^2.1.1:
+ version "2.3.3"
+ resolved "https://registry.npmjs.org/yaml/-/yaml-2.3.3.tgz#01f6d18ef036446340007db8e016810e5d64aad9"
+ integrity sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==
+
yaml@^2.2.1:
version "2.3.2"
resolved "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz#f522db4313c671a0ca963a75670f1c12ea909144"
@@ -11317,7 +12632,17 @@ yargs-parser@^20.2.2, yargs-parser@^20.2.3:
resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
-yargs@16.2.0, yargs@^16.1.1, yargs@^16.2.0:
+yargs-unparser@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb"
+ integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==
+ dependencies:
+ camelcase "^6.0.0"
+ decamelize "^4.0.0"
+ flat "^5.0.2"
+ is-plain-obj "^2.1.0"
+
+yargs@16.2.0, yargs@^16.0.0, yargs@^16.1.1, yargs@^16.2.0:
version "16.2.0"
resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"
integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==