From 1f4f616ac7bb3876727e1fb806717893501cd388 Mon Sep 17 00:00:00 2001 From: song <> Date: Sun, 23 Nov 2025 12:27:33 +0700 Subject: [PATCH 01/19] newArch2 --- .../main/java/com/prisma/PrismaModule.java | 12 +- cpp/QueryEngineHostObject.h | 7 +- ios/Prisma.mm | 115 ++++++++++++++---- 3 files changed, 108 insertions(+), 26 deletions(-) diff --git a/android/src/main/java/com/prisma/PrismaModule.java b/android/src/main/java/com/prisma/PrismaModule.java index 97d5d43d..2b858092 100644 --- a/android/src/main/java/com/prisma/PrismaModule.java +++ b/android/src/main/java/com/prisma/PrismaModule.java @@ -122,7 +122,17 @@ public void createDir(File dir) throws IOException public void install() { ReactApplicationContext context = this.getReactApplicationContext(); long jsContextPointer = context.getJavaScriptContextHolder().get(); - CallInvokerHolderImpl jsCallInvokerHolder = (CallInvokerHolderImpl)context.getCatalystInstance().getJSCallInvokerHolder(); + if (jsContextPointer == 0) { + throw new RuntimeException("JSI runtime pointer is null. Make sure Hermes is enabled and the runtime is initialized before calling install()."); + } + CallInvokerHolderImpl jsCallInvokerHolder; + if (context.getJSCallInvokerHolder() != null) { + jsCallInvokerHolder = (CallInvokerHolderImpl) context.getJSCallInvokerHolder(); + } else if (context.getCatalystInstance() != null) { + jsCallInvokerHolder = (CallInvokerHolderImpl) context.getCatalystInstance().getJSCallInvokerHolder(); + } else { + throw new RuntimeException("JSCallInvokerHolder is not available yet."); + } String dbPath = context.getDatabasePath("defaultDatabase").getAbsolutePath().replace("defaultDatabase", ""); String migrationsPath; try { diff --git a/cpp/QueryEngineHostObject.h b/cpp/QueryEngineHostObject.h index ec18d023..fa78dada 100644 --- a/cpp/QueryEngineHostObject.h +++ b/cpp/QueryEngineHostObject.h @@ -2,7 +2,12 @@ #ifndef query_engine_host_object_h #define query_engine_host_object_h -#include "query_engine.h" +#include +#if TARGET_OS_SIMULATOR +#include "../engines/ios/QueryEngine.xcframework/ios-arm64_x86_64-simulator/Headers/query_engine.h" +#else +#include "../engines/ios/QueryEngine.xcframework/ios-arm64/Headers/query_engine.h" +#endif #include #include #include diff --git a/ios/Prisma.mm b/ios/Prisma.mm index 5898a16b..1bdd2331 100644 --- a/ios/Prisma.mm +++ b/ios/Prisma.mm @@ -1,52 +1,119 @@ #import "Prisma.h" #import +#import #import +#import +#import #import +#import #import +#ifdef RCT_NEW_ARCH_ENABLED +#import "RNPrismaSpecJSI.h" +#endif + +// Forward declare runtimeExecutor to silence selector warnings on older headers +@interface RCTBridge (RuntimeExecutorForwardDecl) +- (facebook::react::RuntimeExecutor)runtimeExecutor; +@end + +static NSString *PrismaLibraryPath() { + NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, true); + return [paths objectAtIndex:0]; +} + +static NSString *PrismaMigrationsPath() { + auto bundleURL = NSBundle.mainBundle.bundleURL; + auto migrations_path_absolute = [NSString stringWithFormat:@"%@%@", bundleURL.absoluteString, @"migrations"]; + return [migrations_path_absolute stringByReplacingOccurrencesOfString:@"file://" withString:@""]; +} + +static inline void InstallInRuntime(facebook::jsi::Runtime &runtime, + std::shared_ptr callInvoker) { + NSString *libraryPath = PrismaLibraryPath(); + NSString *migrationsPath = PrismaMigrationsPath(); + prisma::install_cxx(runtime, callInvoker, [libraryPath UTF8String], [migrationsPath UTF8String]); +} + +static RCTBridge *ResolveBridge(id module) { + RCTBridge *bridge = nil; + if ([module respondsToSelector:@selector(bridge)]) { + bridge = ((id)module).bridge; + } + if (bridge == nil) { + bridge = [RCTBridge currentBridge]; + } + return bridge; +} + @implementation Prisma @synthesize bridge=_bridge; RCT_EXPORT_MODULE() +// Old-arch sync install for classic bridge +#if !RCT_NEW_ARCH_ENABLED RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(install) { - RCTCxxBridge *cxxBridge = (RCTCxxBridge *)_bridge; - if (cxxBridge == nil) { - return @false; +#if DEBUG + std::cout << "▲ NSHomeDirectory:\n" << [NSHomeDirectory() UTF8String] << std::endl; + std::cout << "▲ Library Path:\n" << [PrismaLibraryPath() UTF8String] << std::endl; + std::cout << "▲ Migrations Path:\n" << [PrismaMigrationsPath() UTF8String] << std::endl; +#endif + + BOOL ok = NO; + auto okPtr = &ok; + RCTBridge *bridge = ResolveBridge(self); + + // Try new-arch path first if runtimeExecutor is available + if (bridge && [bridge respondsToSelector:@selector(runtimeExecutor)]) { + facebook::react::RuntimeExecutor executor = RCTRuntimeExecutorFromBridge(bridge); + dispatch_semaphore_t sema = dispatch_semaphore_create(0); + executor([&](facebook::jsi::Runtime &runtime) { + InstallInRuntime(runtime, bridge.jsCallInvoker); + *okPtr = YES; + dispatch_semaphore_signal(sema); + }); + dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER); + return @(ok); } - - auto jsiRuntime = (facebook::jsi::Runtime *)cxxBridge.runtime; - if (jsiRuntime == nil) { + + // Fallback to old-arch bridge access + RCTBridge *legacyBridge = _bridge ?: bridge; + RCTCxxBridge *cxxBridge = (RCTCxxBridge *)legacyBridge; + if (cxxBridge == nil || cxxBridge.runtime == nil) { + NSLog(@"[Prisma] no runtime available to install cxx"); return @false; } + + auto jsiRuntime = (facebook::jsi::Runtime *)cxxBridge.runtime; auto &runtime = *jsiRuntime; - auto callInvoker = _bridge.jsCallInvoker; - - // get migrations folder - auto bundleURL = NSBundle.mainBundle.bundleURL; - auto migrations_path_absolute = [NSString stringWithFormat:@"%@%@", bundleURL.absoluteString, @"migrations"]; - auto migrations_path = [migrations_path_absolute stringByReplacingOccurrencesOfString:@"file://" withString:@""]; - - NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, true); - NSString *libraryPath = [paths objectAtIndex:0]; - -#if DEBUG - std::cout << "▲ NSHomeDirectory:\n" << [NSHomeDirectory() UTF8String] << std::endl; - std::cout << "▲ Library Path:\n" << [libraryPath UTF8String] << std::endl; - std::cout << "▲ Migrations Path:\n" << [migrations_path UTF8String] << std::endl; -#endif + auto callInvoker = _bridge ? _bridge.jsCallInvoker : legacyBridge.jsCallInvoker; - prisma::install_cxx(runtime, callInvoker, [libraryPath UTF8String], [migrations_path UTF8String]); - return nil; + InstallInRuntime(runtime, callInvoker); + return @true; } +#else +// Required by NativePrismaSpec protocol in new-arch; TurboModule path uses C++ spec below. +- (void)install {} +#endif #ifdef RCT_NEW_ARCH_ENABLED - (std::shared_ptr)getTurboModule: (const facebook::react::ObjCTurboModule::InitParams &)params { - return std::make_shared(params); + class PrismaCxxTurboModule final : public facebook::react::NativePrismaCxxSpec { + public: + explicit PrismaCxxTurboModule(std::shared_ptr jsInvoker) + : NativePrismaCxxSpec(std::move(jsInvoker)) {} + + void install(facebook::jsi::Runtime &rt) { + InstallInRuntime(rt, this->jsInvoker_); + } + }; + + return std::make_shared(params.jsInvoker); } #endif From 8909194eaecf671aaf27136ec4a6cb7d3b3710a1 Mon Sep 17 00:00:00 2001 From: song <> Date: Mon, 24 Nov 2025 11:44:48 +0700 Subject: [PATCH 02/19] fix: migration form /prisma/migrations by default --- copy-migrations.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/copy-migrations.sh b/copy-migrations.sh index 43205c26..e97a21dd 100755 --- a/copy-migrations.sh +++ b/copy-migrations.sh @@ -5,7 +5,6 @@ echo "Copying prisma migration files..." MIGRATIONS_TARGET=${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH} rm -rf "$MIGRATIONS_TARGET/migrations" -mkdir "$MIGRATIONS_TARGET/migrations" -cp -r ${SRCROOT}/../migrations ${MIGRATIONS_TARGET} +cp -r ${SRCROOT}/../prisma/migrations "${MIGRATIONS_TARGET}/migrations" echo "migration files copied ✅" \ No newline at end of file From 28e3245e233a17483e88c5861453f6a50c4038ce Mon Sep 17 00:00:00 2001 From: song <> Date: Sat, 14 Mar 2026 17:34:21 +0800 Subject: [PATCH 03/19] fix: capture prisma async state by value --- cpp/react-native-prisma.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/react-native-prisma.cpp b/cpp/react-native-prisma.cpp index 387fbd0b..c8e8c775 100644 --- a/cpp/react-native-prisma.cpp +++ b/cpp/react-native-prisma.cpp @@ -81,7 +81,7 @@ void install_cxx(jsi::Runtime &rt, } auto log_callback_fn = [&rt, js_log_callback](std::string msg) { - call_invoker->invokeAsync([&rt, msg, &js_log_callback] { + call_invoker->invokeAsync([&rt, msg, js_log_callback] { js_log_callback->asObject(rt).asFunction(rt).call( rt, jsi::String::createFromUtf8(rt, msg)); }); @@ -130,7 +130,7 @@ void install_cxx(jsi::Runtime &rt, auto resolve = std::make_shared(rt, args[0]); auto reject = std::make_shared(rt, args[1]); - auto task = [&rt, &queryEngineHostObject, body = std::move(body), + auto task = [&rt, queryEngineHostObject, body = std::move(body), trace = std::move(trace), tx_id = std::move(tx_id), resolve, reject]() { const char *response; From cd52410e2d35b4f1f1d99042f26c1d1c28e1b7c8 Mon Sep 17 00:00:00 2001 From: song <> Date: Sat, 27 Jun 2026 14:32:43 +0700 Subject: [PATCH 04/19] Add synchronous React Native reads --- cpp/react-native-prisma.cpp | 56 ++++++- package.json | 2 + scripts/patch-prisma-runtime.cjs | 59 +++++++ src/SyncQueriesExtension.ts | 265 +++++++++++++++++++++++++++++++ src/index.ts | 10 +- 5 files changed, 387 insertions(+), 5 deletions(-) create mode 100644 scripts/patch-prisma-runtime.cjs create mode 100644 src/SyncQueriesExtension.ts diff --git a/cpp/react-native-prisma.cpp b/cpp/react-native-prisma.cpp index c8e8c775..8cdd1ef0 100644 --- a/cpp/react-native-prisma.cpp +++ b/cpp/react-native-prisma.cpp @@ -4,6 +4,7 @@ #include "macros.h" #include "query_engine.h" #include "utils.h" +#include #include #include @@ -18,6 +19,12 @@ std::unordered_map> engine_map; ThreadPool thread_pool; +static void free_engine_string(const char *value) { + if (value != nullptr) { + free(const_cast(value)); + } +} + // Pure C function that is used by Rust to call the log callback extern void log_callback(const char *id, const char *msg) { if (engine_map.count(id)) { @@ -147,8 +154,10 @@ void install_cxx(jsi::Runtime &rt, call_invoker->invokeAsync([&rt, response = std::move(response), error_ptr, resolve, reject]() { if (error_ptr == nullptr) { + auto js_response = jsi::String::createFromUtf8(rt, response); + free_engine_string(response); resolve->asObject(rt).asFunction(rt).call( - rt, jsi::String::createFromUtf8(rt, response)); + rt, std::move(js_response)); } else { auto errCtr = rt.global().getPropertyAsFunction(rt, "Error"); std::string error_message(error_ptr); @@ -170,6 +179,38 @@ void install_cxx(jsi::Runtime &rt, return promise; }); + auto execute_sync = HOSTFN("executeSync", 4) { + std::shared_ptr queryEngineHostObject = + args[0].asObject(rt).asHostObject(rt); + std::string body = args[1].asString(rt).utf8(rt); + std::string trace = args[2].asString(rt).utf8(rt); + std::string tx_id; + if (count > 3 && args[3].isString()) { + tx_id = args[3].asString(rt).utf8(rt); + } + + const char *response = nullptr; + char *error_ptr = nullptr; + + if (!tx_id.empty()) { + response = prisma_query(queryEngineHostObject->engine, body.c_str(), + trace.c_str(), tx_id.c_str(), &error_ptr); + } else { + response = prisma_query(queryEngineHostObject->engine, body.c_str(), + trace.c_str(), nullptr, &error_ptr); + } + + if (error_ptr == nullptr) { + auto js_response = jsi::String::createFromUtf8(rt, response); + free_engine_string(response); + return js_response; + } + + std::string error_message(error_ptr); + free(error_ptr); + throw std::runtime_error(error_message); + }); + auto start_transaction = HOSTFN("startTransaction", 3) { std::shared_ptr queryEngineHostObject = args[0].asObject(rt).asHostObject(rt); @@ -183,7 +224,9 @@ void install_cxx(jsi::Runtime &rt, throw std::runtime_error("prisma engine did not start transaction"); } - return jsi::String::createFromUtf8(rt, std::string(response)); + auto js_response = jsi::String::createFromUtf8(rt, response); + free_engine_string(response); + return js_response; }); auto commit_transaction = HOSTFN("commitTransaction", 3) { @@ -199,7 +242,9 @@ void install_cxx(jsi::Runtime &rt, throw std::runtime_error("prisma engine did not commit transaction"); } - return jsi::String::createFromUtf8(rt, std::string(response)); + auto js_response = jsi::String::createFromUtf8(rt, response); + free_engine_string(response); + return js_response; }); auto rollback_transaction = HOSTFN("rollbackTransaction", 3) { @@ -215,7 +260,9 @@ void install_cxx(jsi::Runtime &rt, throw std::runtime_error("prisma engine did not rollback transaction"); } - return jsi::String::createFromUtf8(rt, std::string(response)); + auto js_response = jsi::String::createFromUtf8(rt, response); + free_engine_string(response); + return js_response; }); auto disconnect = HOSTFN("disconnect", 2) { @@ -253,6 +300,7 @@ void install_cxx(jsi::Runtime &rt, module.setProperty(rt, "create", std::move(create)); module.setProperty(rt, "connect", std::move(connect)); module.setProperty(rt, "execute", std::move(execute)); + module.setProperty(rt, "executeSync", std::move(execute_sync)); module.setProperty(rt, "startTransaction", std::move(start_transaction)); module.setProperty(rt, "commitTransaction", std::move(commit_transaction)); module.setProperty(rt, "rollbackTransaction", diff --git a/package.json b/package.json index 3845e2ca..470d0d24 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "!**/__mocks__", "!**/.*", "copy-migrations.sh", + "scripts/patch-prisma-runtime.cjs", "react-native-prisma.gradle", "plugin", "app.plugin.js", @@ -42,6 +43,7 @@ "lint": "eslint \"**/*.{js,ts,tsx}\"", "clean": "del-cli android/build example/android/build example/android/app/build example/ios/build lib", "prepare": "yarn download-engine && bob build", + "postinstall": "node ./scripts/patch-prisma-runtime.cjs", "ios:full": "yarn qe:sim && cd example && yarn ios", "clang": "clang-format -i ./cpp/*.cpp ./cpp/*.h && git add .", "ios": "cd example && yarn ios", diff --git a/scripts/patch-prisma-runtime.cjs b/scripts/patch-prisma-runtime.cjs new file mode 100644 index 00000000..7be33148 --- /dev/null +++ b/scripts/patch-prisma-runtime.cjs @@ -0,0 +1,59 @@ +#!/usr/bin/env node + +const fs = require('node:fs'); + +function resolveRuntime() { + const paths = [process.env.INIT_CWD, process.cwd()].filter(Boolean); + return require.resolve('@prisma/client/runtime/react-native.js', { paths }); +} + +function patchRuntime(runtimePath) { + let source = fs.readFileSync(runtimePath, 'utf8'); + let patched = false; + + const queryMethod = + 'query(t,r,n,i){return __PrismaProxy.execute(this.engineObject,t,r,n,i)}compile(){throw new Error("not implemented")}'; + const querySyncMethod = + 'query(t,r,n,i){return __PrismaProxy.execute(this.engineObject,t,r,n,i)}querySync(t,r,n,i){return globalThis.__PrismaProxy.executeSync(this.engineObject,t,r,n,i)}compile(){throw new Error("not implemented")}'; + + if (source.includes(queryMethod)) { + source = source.replace(queryMethod, querySyncMethod); + patched = true; + } else if (!source.includes(querySyncMethod)) { + throw new Error( + `Unsupported @prisma/client react-native QueryEngine shape: ${runtimePath}` + ); + } + + const wrapEngineQuery = + 'metrics:t.metrics?.bind(t),query:this.withRequestId(t.query.bind(t)),rollbackTransaction:this.withRequestId(t.rollbackTransaction.bind(t))'; + const wrapEngineQuerySync = + 'metrics:t.metrics?.bind(t),query:this.withRequestId(t.query.bind(t)),querySync:t.querySync?.bind(t),rollbackTransaction:this.withRequestId(t.rollbackTransaction.bind(t))'; + + if (source.includes(wrapEngineQuery)) { + source = source.replace(wrapEngineQuery, wrapEngineQuerySync); + patched = true; + } else if (!source.includes(wrapEngineQuerySync)) { + throw new Error( + `Unsupported @prisma/client react-native wrapEngine shape: ${runtimePath}` + ); + } + + if (patched) { + fs.writeFileSync(runtimePath, source); + } + return patched; +} + +try { + const runtimePath = resolveRuntime(); + if (patchRuntime(runtimePath)) { + console.log(`Patched Prisma React Native runtime: ${runtimePath}`); + } +} catch (error) { + console.warn( + `Could not patch Prisma React Native runtime: ${ + error instanceof Error ? error.message : String(error) + }` + ); +} diff --git a/src/SyncQueriesExtension.ts b/src/SyncQueriesExtension.ts new file mode 100644 index 00000000..719805bd --- /dev/null +++ b/src/SyncQueriesExtension.ts @@ -0,0 +1,265 @@ +import { Prisma } from '@prisma/client/extension'; +import { + type Action, + serializeJsonQuery, +} from '@prisma/client/runtime/react-native'; + +const requestSync = ( + client: any, + modelName: string, + action: Action, + args: any, + protocolArgs = args, + unpacker?: (data: any) => any +) => { + const engine = client._engine; + if ( + !engine?.libraryStarted || + !engine.engine?.querySync || + !globalThis.__PrismaProxy?.executeSync + ) { + throw new Error('Prisma synchronous query engine is not connected'); + } + + const clientMethod = `${modelName}.${action}`; + const protocolQuery = serializeJsonQuery({ + modelName, + runtimeDataModel: client._runtimeDataModel, + action, + args: protocolArgs, + clientMethod, + callsite: undefined, + extensions: client._extensions, + errorFormat: client._errorFormat, + clientVersion: client._clientVersion, + previewFeatures: client._previewFeatures, + globalOmit: client._globalOmit, + }); + const response = engine.parseEngineResponse( + engine.engine.querySync( + JSON.stringify(protocolQuery), + JSON.stringify({ + traceparent: client._tracingHelper.getTraceParent(), + }), + undefined + ) + ); + + if (response.errors) { + throw response.errors.length === 1 + ? engine.buildQueryError(response.errors[0]) + : new Error(JSON.stringify(response.errors)); + } + if (engine.loggerRustPanic) { + throw engine.loggerRustPanic; + } + + return client._requestHandler.mapQueryEngineResult( + { + protocolQuery, + modelName, + action, + clientMethod, + dataPath: [], + args, + extensions: client._extensions, + transaction: undefined, + unpacker, + otelParentCtx: undefined, + otelChildCtx: client._tracingHelper.getActiveContext(), + globalOmit: client._globalOmit, + customDataProxyFetch: undefined, + }, + { data: response } + ); +}; + +const aggregateKeys = new Set(['_avg', '_count', '_sum', '_min', '_max']); + +const normalizeCount = (args: any = {}) => + typeof args._count === 'boolean' + ? { ...args, _count: { _all: args._count } } + : args; + +const mapAggregateArgs = (args: any = {}) => + Object.entries(normalizeCount(args)).reduce( + (mapped, [key, value]) => { + if (aggregateKeys.has(key)) { + mapped.select[key] = { select: value }; + } else { + mapped[key] = value; + } + return mapped; + }, + { select: {} } + ); + +const unpackAggregate = + (args: any = {}) => + (data: any) => { + if (typeof args._count === 'boolean') { + data._count = data._count._all; + } + return data; + }; + +const mapCountArgs = (args: any = {}) => { + const { select, ...rest } = args; + return mapAggregateArgs({ + ...rest, + _count: typeof select === 'object' ? select : { _all: true }, + }); +}; + +const unpackCount = + (args: any = {}) => + (data: any) => { + const count = unpackAggregate(args)(data)._count; + return typeof args.select === 'object' ? count : count._all; + }; + +const mapGroupByArgs = (args: any = {}) => { + const mapped = mapAggregateArgs(args); + const by = Array.isArray(mapped.by) ? mapped.by : [mapped.by]; + for (const field of by) { + if (typeof field === 'string') { + mapped.select[field] = true; + } + } + return mapped; +}; + +const unpackGroupBy = + (args: any = {}) => + (data: any[]) => { + if (typeof args._count === 'boolean') { + data.forEach((row) => { + row._count = row._count._all; + }); + } + return data; + }; + +const modelNameOf = (client: any, model: unknown) => { + const context = Prisma.getExtensionContext(model as never) as { + $name?: string; + }; + const name = context.$name; + const modelName = Object.keys(client._runtimeDataModel.models).find( + (candidate) => candidate.toLowerCase() === name?.toLowerCase() + ); + if (!modelName) { + throw new Error(`Unknown Prisma model: ${name ?? 'undefined'}`); + } + return modelName; +}; + +export const synchronousQueriesExtension = () => + Prisma.defineExtension((client) => + client.$extends({ + name: 'prisma-react-native-synchronous-queries', + client: { + $applyPendingMigrations: () => + (client as any).$applyPendingMigrations(), + }, + model: { + $allModels: { + findUnique( + this: T, + args: Prisma.Exact> + ): Prisma.Result { + return requestSync( + client, + modelNameOf(client, this), + 'findUnique', + args + ); + }, + findUniqueOrThrow( + this: T, + args: Prisma.Exact> + ): Prisma.Result { + return requestSync( + client, + modelNameOf(client, this), + 'findUniqueOrThrow', + args + ); + }, + findFirst( + this: T, + args?: Prisma.Exact> + ): Prisma.Result { + return requestSync( + client, + modelNameOf(client, this), + 'findFirst', + args + ); + }, + findFirstOrThrow( + this: T, + args?: Prisma.Exact> + ): Prisma.Result { + return requestSync( + client, + modelNameOf(client, this), + 'findFirstOrThrow', + args + ); + }, + findMany( + this: T, + args?: Prisma.Exact> + ): Prisma.Result { + return requestSync( + client, + modelNameOf(client, this), + 'findMany', + args + ); + }, + count( + this: T, + args?: Prisma.Exact> + ): Prisma.Result { + const modelName = modelNameOf(client, this); + return requestSync( + client, + modelName, + 'count', + args, + mapCountArgs(args), + unpackCount(args) + ); + }, + aggregate( + this: T, + args: Prisma.Exact> + ): Prisma.Result { + return requestSync( + client, + modelNameOf(client, this), + 'aggregate', + args, + mapAggregateArgs(args), + unpackAggregate(args) + ); + }, + groupBy( + this: T, + args: Prisma.Exact> + ): Prisma.Result { + return requestSync( + client, + modelNameOf(client, this), + 'groupBy', + args, + mapGroupByArgs(args), + unpackGroupBy(args) + ); + }, + }, + }, + }) + ); diff --git a/src/index.ts b/src/index.ts index a448579c..ea998341 100644 --- a/src/index.ts +++ b/src/index.ts @@ -7,6 +7,7 @@ global.btoa = btoa; export { reactiveHooksExtension } from './ReactiveHooksExtension'; export { reactiveQueriesExtension } from './ReactiveQueriesExtension'; +export { synchronousQueriesExtension } from './SyncQueriesExtension'; declare global { // eslint-disable-next-line no-var @@ -32,6 +33,7 @@ if (!global.__PrismaProxy) { // Wrap the create function to stringify the env variables if necessary const ogCreate = __PrismaProxy!.create; + global.__PrismaProxy = { ...global.__PrismaProxy, create: (options: PrismaCreateOptions): QueryEngineObject => { @@ -64,8 +66,14 @@ type PrismaProxy = { engine: QueryEngineObject, body: string, headers: string, - txId: string + txId?: string ) => Promise; + executeSync?: ( + engine: QueryEngineObject, + body: string, + headers: string, + txId?: string + ) => string; startTransaction: ( engine: QueryEngineObject, body: string, From d151d08062e450d9c64d238b32ea0cb1cc7c9176 Mon Sep 17 00:00:00 2001 From: song <> Date: Tue, 25 Aug 2026 13:43:45 +0700 Subject: [PATCH 05/19] =?UTF-8?q?=E9=87=8D=E6=9E=84=20React=20Native=20Pri?= =?UTF-8?q?sma=207=20=E4=B8=BA=E5=90=8C=E6=AD=A5=E9=A9=B1=E5=8A=A8?= =?UTF-8?q?=E6=9E=B6=E6=9E=84=E5=B9=B6=E7=A7=BB=E9=99=A4=E6=97=A7=E5=8E=9F?= =?UTF-8?q?=E7=94=9F=E5=BC=95=E6=93=8E=EF=BC=8C=E6=94=AF=E6=8C=81=20Expo?= =?UTF-8?q?=20SQLite=20=E5=90=8C=E6=AD=A5=20CRUD=20=E4=B8=8E=E4=BA=8B?= =?UTF-8?q?=E5=8A=A1=E5=9B=9E=E6=BB=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc.js | 2 - .github/actions/setup/action.yml | 19 - .github/workflows/check-updates.yml | 60 - .github/workflows/ci.yml | 27 +- .github/workflows/test.yml | 108 - .github/workflows/update-and-publish.yml | 139 - .gitignore | 80 +- .nvmrc | 1 - .ruby-version | 1 - .versions/engine | 1 - .versions/prisma-dev | 1 - .versions/prisma-latest | 1 - .watchmanconfig | 1 - README.md | 186 +- android/CMakeLists.txt | 54 - android/build.gradle | 162 - android/cpp-adapter.cpp | 38 - android/gradle.properties | 5 - android/src/main/AndroidManifest.xml | 3 - android/src/main/AndroidManifestNew.xml | 2 - .../main/java/com/prisma/PrismaModule.java | 149 - .../main/java/com/prisma/PrismaPackage.java | 45 - android/src/newarch/PrismaSpec.java | 9 - android/src/oldarch/PrismaSpec.java | 13 - app.plugin.js | 1 - babel.config.js | 4 - copy-migrations.sh | 10 - cpp/QueryEngineHostObject.cpp | 14 - cpp/QueryEngineHostObject.h | 31 - cpp/ThreadPool.cpp | 117 - cpp/ThreadPool.h | 47 - cpp/macros.h | 11 - cpp/react-native-prisma.cpp | 322 - cpp/react-native-prisma.h | 18 - cpp/utils.cpp | 23 - cpp/utils.h | 4 - example/.bundle/config | 2 - example/.detoxrc.js | 50 - example/.ruby-version | 1 - example/.watchmanconfig | 1 - example/Gemfile | 7 - example/Gemfile.lock | 105 - example/README.md | 79 - example/android/app/build.gradle | 131 - example/android/app/debug.keystore | Bin 2257 -> 0 bytes example/android/app/proguard-rules.pro | 10 - .../java/com/prismaexample/DetoxTest.java | 30 - .../android/app/src/debug/AndroidManifest.xml | 9 - .../android/app/src/main/AndroidManifest.xml | 26 - .../assets/migrations/0_init/migration.sql | 53 - .../20240118142005_nick2/migration.sql | 2 - .../20240119102352_nick3/migration.sql | 2 - .../20240119143417_nick4/migration.sql | 2 - .../20240122145141_my_field/migration.sql | 2 - .../assets/migrations/migration_lock.toml | 3 - .../java/com/prismaexample/MainActivity.kt | 22 - .../java/com/prismaexample/MainApplication.kt | 45 - .../res/drawable/rn_edit_text_material.xml | 36 - .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 3056 -> 0 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 5024 -> 0 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 2096 -> 0 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 2858 -> 0 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 4569 -> 0 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 7098 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 6464 -> 0 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 10676 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 9250 -> 0 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 15523 -> 0 bytes .../app/src/main/res/values/strings.xml | 3 - .../app/src/main/res/values/styles.xml | 9 - .../main/res/xml/network_security_config.xml | 7 - example/android/build.gradle | 30 - example/android/gradle.properties | 41 - .../android/gradle/wrapper/gradle-wrapper.jar | Bin 63721 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 - example/android/gradlew | 249 - example/android/gradlew.bat | 92 - example/android/settings.gradle | 4 - example/app.json | 4 - example/babel.config.js | 19 - example/dev.db | Bin 53248 -> 0 bytes example/dev.db-journal | Bin 8720 -> 0 bytes example/e2e/jest.config.js | 12 - example/e2e/starter.test.js | 14 - example/global.css | 3 - example/globals.d.ts | 1 - example/index.js | 6 - example/ios/.xcode.env | 11 - example/ios/.xcode.env.local | 1 - example/ios/File.swift | 6 - example/ios/Podfile | 34 - example/ios/Podfile.lock | 1315 -- example/ios/PrismaExample-Bridging-Header.h | 3 - .../PrismaExample.xcodeproj/project.pbxproj | 527 - .../xcshareddata/xcschemes/Debug.xcscheme | 86 - .../xcshareddata/xcschemes/Release.xcscheme | 88 - .../contents.xcworkspacedata | 10 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - example/ios/PrismaExample/AppDelegate.h | 6 - example/ios/PrismaExample/AppDelegate.mm | 33 - .../AppIcon.appiconset/Contents.json | 14 - .../AppIcon.appiconset/Frame 20.png | Bin 25900 -> 0 bytes .../Images.xcassets/Contents.json | 6 - .../Logo.imageset/Contents.json | 12 - .../Logo.imageset/Frame 20.png | Bin 25900 -> 0 bytes example/ios/PrismaExample/Info.plist | 51 - .../ios/PrismaExample/LaunchScreen.storyboard | 36 - example/ios/PrismaExample/main.m | 10 - example/ios/PrismaExampleTests/Info.plist | 24 - .../PrismaExampleTests/PrismaExampleTests.m | 66 - example/ios/link-assets-manifest.json | 13 - example/metro.config.js | 51 - example/migrations/0_init/migration.sql | 53 - .../20240118142005_nick2/migration.sql | 2 - .../20240119102352_nick3/migration.sql | 2 - .../20240119143417_nick4/migration.sql | 2 - .../20240122145141_my_field/migration.sql | 2 - example/migrations/migration_lock.toml | 3 - example/package.json | 47 - example/react-native.config.js | 12 - example/schema.prisma | 46 - example/src/App.tsx | 112 - example/src/Button.tsx | 13 - example/src/db.ts | 82 - example/src/server.ts | 94 - example/tailwind.config.js | 13 - expo.d.ts | 1 - expo.js | 1 - ios/Prisma.h | 16 - ios/Prisma.mm | 124 - lefthook.yml | 11 - package.json | 197 +- plugin/build/index.d.ts | 3 - plugin/build/index.js | 11 - plugin/build/withPrisma.d.ts | 3 - plugin/build/withPrisma.js | 34 - plugin/build/withPrismaAndroid.d.ts | 2 - plugin/build/withPrismaAndroid.js | 28 - plugin/build/withPrismaIOS.d.ts | 10 - plugin/build/withPrismaIOS.js | 37 - plugin/src/index.ts | 5 - plugin/src/withPrisma.ts | 34 - plugin/src/withPrismaAndroid.ts | 29 - plugin/src/withPrismaIOS.ts | 38 - plugin/tsconfig.json | 9 - react-native-prisma.gradle | 6 - react-native-prisma.podspec | 45 - react-native.config.js | 3 + scripts/bump-client.ts | 33 - scripts/check-updates.ts | 45 - scripts/download-engine.ts | 3 - scripts/patch-prisma-runtime.cjs | 141 +- scripts/prepare-client.cjs | 32 + scripts/utils.ts | 49 - src/ExpoSQLiteAdapter.ts | 266 + src/NativePrisma.ts | 8 - src/ReactiveHooksExtension.ts | 305 - src/ReactiveQueriesExtension.ts | 262 - src/SyncDriverAdapter.ts | 25 + src/SyncQueriesExtension.ts | 118 +- src/expo-sqlite.ts | 1 + src/index.ts | 99 +- tsconfig.json | 17 +- xcode.png | Bin 476537 -> 0 bytes yarn.lock | 18294 +++++----------- 165 files changed, 5633 insertions(+), 20434 deletions(-) delete mode 100644 .eslintrc.js delete mode 100644 .github/actions/setup/action.yml delete mode 100644 .github/workflows/check-updates.yml delete mode 100644 .github/workflows/test.yml delete mode 100644 .github/workflows/update-and-publish.yml delete mode 100644 .nvmrc delete mode 100644 .ruby-version delete mode 100644 .versions/engine delete mode 100644 .versions/prisma-dev delete mode 100644 .versions/prisma-latest delete mode 100644 .watchmanconfig delete mode 100644 android/CMakeLists.txt delete mode 100644 android/build.gradle delete mode 100644 android/cpp-adapter.cpp delete mode 100644 android/gradle.properties delete mode 100644 android/src/main/AndroidManifest.xml delete mode 100644 android/src/main/AndroidManifestNew.xml delete mode 100644 android/src/main/java/com/prisma/PrismaModule.java delete mode 100644 android/src/main/java/com/prisma/PrismaPackage.java delete mode 100644 android/src/newarch/PrismaSpec.java delete mode 100644 android/src/oldarch/PrismaSpec.java delete mode 100644 app.plugin.js delete mode 100644 babel.config.js delete mode 100755 copy-migrations.sh delete mode 100644 cpp/QueryEngineHostObject.cpp delete mode 100644 cpp/QueryEngineHostObject.h delete mode 100644 cpp/ThreadPool.cpp delete mode 100644 cpp/ThreadPool.h delete mode 100644 cpp/macros.h delete mode 100644 cpp/react-native-prisma.cpp delete mode 100644 cpp/react-native-prisma.h delete mode 100644 cpp/utils.cpp delete mode 100644 cpp/utils.h delete mode 100644 example/.bundle/config delete mode 100644 example/.detoxrc.js delete mode 100644 example/.ruby-version delete mode 100644 example/.watchmanconfig delete mode 100644 example/Gemfile delete mode 100644 example/Gemfile.lock delete mode 100644 example/README.md delete mode 100644 example/android/app/build.gradle delete mode 100644 example/android/app/debug.keystore delete mode 100644 example/android/app/proguard-rules.pro delete mode 100644 example/android/app/src/androidTest/java/com/prismaexample/DetoxTest.java delete mode 100644 example/android/app/src/debug/AndroidManifest.xml delete mode 100644 example/android/app/src/main/AndroidManifest.xml delete mode 100644 example/android/app/src/main/assets/migrations/0_init/migration.sql delete mode 100644 example/android/app/src/main/assets/migrations/20240118142005_nick2/migration.sql delete mode 100644 example/android/app/src/main/assets/migrations/20240119102352_nick3/migration.sql delete mode 100644 example/android/app/src/main/assets/migrations/20240119143417_nick4/migration.sql delete mode 100644 example/android/app/src/main/assets/migrations/20240122145141_my_field/migration.sql delete mode 100644 example/android/app/src/main/assets/migrations/migration_lock.toml delete mode 100644 example/android/app/src/main/java/com/prismaexample/MainActivity.kt delete mode 100644 example/android/app/src/main/java/com/prismaexample/MainApplication.kt delete mode 100644 example/android/app/src/main/res/drawable/rn_edit_text_material.xml delete mode 100644 example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png delete mode 100644 example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png delete mode 100644 example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png delete mode 100644 example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png delete mode 100644 example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png delete mode 100644 example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png delete mode 100644 example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png delete mode 100644 example/android/app/src/main/res/values/strings.xml delete mode 100644 example/android/app/src/main/res/values/styles.xml delete mode 100644 example/android/app/src/main/res/xml/network_security_config.xml delete mode 100644 example/android/build.gradle delete mode 100644 example/android/gradle.properties delete mode 100644 example/android/gradle/wrapper/gradle-wrapper.jar delete mode 100644 example/android/gradle/wrapper/gradle-wrapper.properties delete mode 100755 example/android/gradlew delete mode 100644 example/android/gradlew.bat delete mode 100644 example/android/settings.gradle delete mode 100644 example/app.json delete mode 100644 example/babel.config.js delete mode 100644 example/dev.db delete mode 100644 example/dev.db-journal delete mode 100644 example/e2e/jest.config.js delete mode 100644 example/e2e/starter.test.js delete mode 100644 example/global.css delete mode 100644 example/globals.d.ts delete mode 100644 example/index.js delete mode 100644 example/ios/.xcode.env delete mode 100644 example/ios/.xcode.env.local delete mode 100644 example/ios/File.swift delete mode 100644 example/ios/Podfile delete mode 100644 example/ios/Podfile.lock delete mode 100644 example/ios/PrismaExample-Bridging-Header.h delete mode 100644 example/ios/PrismaExample.xcodeproj/project.pbxproj delete mode 100644 example/ios/PrismaExample.xcodeproj/xcshareddata/xcschemes/Debug.xcscheme delete mode 100644 example/ios/PrismaExample.xcodeproj/xcshareddata/xcschemes/Release.xcscheme delete mode 100644 example/ios/PrismaExample.xcworkspace/contents.xcworkspacedata delete mode 100644 example/ios/PrismaExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 example/ios/PrismaExample/AppDelegate.h delete mode 100644 example/ios/PrismaExample/AppDelegate.mm delete mode 100644 example/ios/PrismaExample/Images.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 example/ios/PrismaExample/Images.xcassets/AppIcon.appiconset/Frame 20.png delete mode 100644 example/ios/PrismaExample/Images.xcassets/Contents.json delete mode 100644 example/ios/PrismaExample/Images.xcassets/Logo.imageset/Contents.json delete mode 100644 example/ios/PrismaExample/Images.xcassets/Logo.imageset/Frame 20.png delete mode 100644 example/ios/PrismaExample/Info.plist delete mode 100644 example/ios/PrismaExample/LaunchScreen.storyboard delete mode 100644 example/ios/PrismaExample/main.m delete mode 100644 example/ios/PrismaExampleTests/Info.plist delete mode 100644 example/ios/PrismaExampleTests/PrismaExampleTests.m delete mode 100644 example/ios/link-assets-manifest.json delete mode 100644 example/metro.config.js delete mode 100644 example/migrations/0_init/migration.sql delete mode 100644 example/migrations/20240118142005_nick2/migration.sql delete mode 100644 example/migrations/20240119102352_nick3/migration.sql delete mode 100644 example/migrations/20240119143417_nick4/migration.sql delete mode 100644 example/migrations/20240122145141_my_field/migration.sql delete mode 100644 example/migrations/migration_lock.toml delete mode 100644 example/package.json delete mode 100644 example/react-native.config.js delete mode 100644 example/schema.prisma delete mode 100644 example/src/App.tsx delete mode 100644 example/src/Button.tsx delete mode 100644 example/src/db.ts delete mode 100644 example/src/server.ts delete mode 100644 example/tailwind.config.js delete mode 100644 expo.d.ts delete mode 100644 expo.js delete mode 100644 ios/Prisma.h delete mode 100644 ios/Prisma.mm delete mode 100644 lefthook.yml delete mode 100644 plugin/build/index.d.ts delete mode 100644 plugin/build/index.js delete mode 100644 plugin/build/withPrisma.d.ts delete mode 100644 plugin/build/withPrisma.js delete mode 100644 plugin/build/withPrismaAndroid.d.ts delete mode 100644 plugin/build/withPrismaAndroid.js delete mode 100644 plugin/build/withPrismaIOS.d.ts delete mode 100644 plugin/build/withPrismaIOS.js delete mode 100644 plugin/src/index.ts delete mode 100644 plugin/src/withPrisma.ts delete mode 100644 plugin/src/withPrismaAndroid.ts delete mode 100644 plugin/src/withPrismaIOS.ts delete mode 100644 plugin/tsconfig.json delete mode 100644 react-native-prisma.gradle delete mode 100644 react-native-prisma.podspec create mode 100644 react-native.config.js delete mode 100644 scripts/bump-client.ts delete mode 100644 scripts/check-updates.ts delete mode 100644 scripts/download-engine.ts create mode 100755 scripts/prepare-client.cjs delete mode 100644 scripts/utils.ts create mode 100644 src/ExpoSQLiteAdapter.ts delete mode 100644 src/NativePrisma.ts delete mode 100644 src/ReactiveHooksExtension.ts delete mode 100644 src/ReactiveQueriesExtension.ts create mode 100644 src/SyncDriverAdapter.ts create mode 100644 src/expo-sqlite.ts delete mode 100644 xcode.png diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 27201978..00000000 --- a/.eslintrc.js +++ /dev/null @@ -1,2 +0,0 @@ -// @generated by expo-module-scripts -module.exports = require('expo-module-scripts/eslintrc.base.js'); diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml deleted file mode 100644 index 4b221450..00000000 --- a/.github/actions/setup/action.yml +++ /dev/null @@ -1,19 +0,0 @@ -name: Setup -description: Setup Node.js and install dependencies - -runs: - using: composite - steps: - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version-file: .nvmrc - cache: 'yarn' - - - name: Install dependencies - run: yarn install --immutable - shell: bash - - - name: Prepare project checkout - run: yarn prepare - shell: bash diff --git a/.github/workflows/check-updates.yml b/.github/workflows/check-updates.yml deleted file mode 100644 index dee11ac6..00000000 --- a/.github/workflows/check-updates.yml +++ /dev/null @@ -1,60 +0,0 @@ -name: Check for a new client version -on: - schedule: - - cron: '*/5 * * * *' - workflow_dispatch: - -jobs: - skip-duplicates: - name: Skip update if job is already in progress - runs-on: ubuntu-latest - outputs: - should-skip: ${{ steps.skip-check.outputs.should_skip }} - steps: - - id: skip-check - uses: fkirc/skip-duplicate-actions@v5 - with: - do_not_skip: '[]' - skip_after_successful_duplicate: 'false' - concurrent_skipping: 'always' - - check-update: - runs-on: ubuntu-latest - needs: skip-duplicates - if: ${{ needs.skip-duplicates.outputs.should-skip != 'true' }} - outputs: - latest: ${{ steps.check-update.outputs.latest }} - dev: ${{ steps.check-update.outputs.dev }} - integration: ${{ steps.check-update.outputs.dev }} - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup - uses: ./.github/actions/setup - - - name: Check for updates - id: check-update - run: yarn check-updates - - update-latest: - name: Update latest tag - needs: - - check-update - if: ${{ needs.check-update.outputs.latest != ''}} - uses: ./.github/workflows/update-and-publish.yml - secrets: inherit - with: - npmTag: latest - version: ${{ needs.check-update.outputs.latest }} - - update-dev: - name: Update dev tag - needs: - - check-update - if: ${{ needs.check-update.outputs.dev != ''}} - uses: ./.github/workflows/update-and-publish.yml - secrets: inherit - with: - npmTag: dev - version: ${{ needs.check-update.outputs.dev }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e6b9aa47..04f0244a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,18 +1,17 @@ name: CI -on: - push: - branches: - - main - pull_request: - branches: - - main -concurrency: - group: ci-${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true +on: [push, pull_request] jobs: - test: - name: Run test - uses: ./.github/workflows/test.yml - secrets: inherit + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 22 + cache: yarn + - run: corepack enable + - run: yarn install --immutable + - run: yarn typecheck + - run: yarn prepare diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml deleted file mode 100644 index 26eaec1b..00000000 --- a/.github/workflows/test.yml +++ /dev/null @@ -1,108 +0,0 @@ -name: Test -on: - workflow_call: - inputs: - ref: - description: Ref to run the tests on - type: string - required: false - -jobs: - lint-test: - name: Lint - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - ref: ${{ inputs.ref }} - - - name: Setup - uses: ./.github/actions/setup - - - name: Lint files - run: yarn lint - - - name: Typecheck files - run: yarn typecheck - - test-ios: - name: E2E test for iOS - runs-on: macos-14 - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - ref: ${{ inputs.ref }} - - - name: Setup - uses: ./.github/actions/setup - - - name: Install macOS dependencies - run: | - brew tap wix/brew - brew install applesimutils - env: - HOMEBREW_NO_AUTO_UPDATE: 1 - HOMEBREW_NO_INSTALL_CLEANUP: 1 - - name: Install CocoaPods dependecies - working-directory: example - run: yarn pod-install - - - name: Detox build - working-directory: example - run: yarn detox build --configuration ios.sim.release - - - name: Detox test - working-directory: example - run: yarn detox test --configuration ios.sim.release --cleanup --headless - - test-android: - name: E2E test for Android - runs-on: ubuntu-latest - steps: - # default runner has not enough space for creating emulators - - name: Free disk space - uses: jlumbroso/free-disk-space@v1.3.1 - with: - android: false - tool-cache: true - dotnet: true - haskell: true - swap-storage: true - docker-images: true - large-packages: false - - - name: Checkout - uses: actions/checkout@v4 - with: - ref: ${{ inputs.ref }} - - - name: Setup Java - uses: actions/setup-java@v3 - with: - cache: gradle - distribution: temurin - java-version: 17 - - - name: Setup - uses: ./.github/actions/setup - - - name: Detox build - working-directory: example - run: yarn detox build --configuration android.emu.release - - - name: Enable KVM group perms # make android simulator use KVM and run much faster - run: | - echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules - sudo udevadm control --reload-rules - sudo udevadm trigger --name-match=kvm - - - name: Detox test - uses: reactivecircus/android-emulator-runner@v2 - with: - working-directory: example - api-level: 28 - arch: x86_64 - avd-name: Pixel_API_28 - script: yarn detox test --configuration android.emu.release --headless diff --git a/.github/workflows/update-and-publish.yml b/.github/workflows/update-and-publish.yml deleted file mode 100644 index 57225e21..00000000 --- a/.github/workflows/update-and-publish.yml +++ /dev/null @@ -1,139 +0,0 @@ -name: Update prisma client and publish the package -on: - workflow_call: - inputs: - npmTag: - description: npm tag to publish to - type: string - required: true - version: - description: npm version to publish - type: string - required: true - secrets: - SLACK_WEBHOOK_URL: - required: true - NPM_TOKEN: - required: true - workflow_dispatch: - inputs: - npmTag: - description: npm tag to publish to - type: string - required: true - version: - description: npm version to publish - type: string - required: true - -concurrency: - group: publish - -jobs: - update: - name: Update client & engines on a temporary branch - runs-on: ubuntu-latest - env: - TMP_BRANCH_NAME: tmp/release-${{ inputs.npmTag }}-${{ inputs.version }} - NPM_TAG: ${{ inputs.npmTag }} - NPM_VERSION: ${{ inputs.version }} - outputs: - tmpBranch: ${{ steps.do-update.outputs.tmpBranch }} - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - token: ${{ secrets.PRISMA_BOT_TOKEN }} - - - name: Setup - uses: ./.github/actions/setup - - - name: Update version in temporary branch - id: do-update - run: | - git checkout -b "$TMP_BRANCH_NAME" - yarn bump-client "$NPM_TAG" "$NPM_VERSION" - git config user.email prismabots@gmail.com - git config user.name Prismo - git commit -am "chore(deps): Update prisma to $NPM_VERSION on $NPM_TAG" - git push origin "$TMP_BRANCH_NAME" - echo "tmpBranch=$TMP_BRANCH_NAME" >> "$GITHUB_OUTPUT" - - test: - name: Test release branch - needs: - - update - uses: ./.github/workflows/test.yml - with: - ref: ${{ needs.update.outputs.tmpBranch }} - secrets: inherit - - publish: - name: Merge temp branch back and publish - runs-on: ubuntu-latest - needs: - - update - - test - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - token: ${{ secrets.PRISMA_BOT_TOKEN }} - - - name: Merge temp release branch back into main - env: - TMP_BRANCH_NAME: ${{ needs.update.outputs.tmpBranch }} - run: | - git fetch origin "$TMP_BRANCH_NAME" - git merge --ff-only "origin/$TMP_BRANCH_NAME" - - - name: Setup - uses: ./.github/actions/setup - - - name: Publish - env: - NPM_TAG: ${{ inputs.npmTag }} - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - run: yarn npm publish --tag "$NPM_TAG" - - - name: Push - run: git push origin main - - notify-on-failure: - name: Notify on publish failure - needs: - - update - - test - - publish - if: ${{ always() && contains(needs.*.result, 'failure') }} - - runs-on: ubuntu-latest - steps: - - name: Set current job url in SLACK_FOOTER env var - run: echo "SLACK_FOOTER=<$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID|Click here to go to the job logs>" >> $GITHUB_ENV - - - name: Slack Notification on Failure - uses: rtCamp/action-slack-notify@v2.3.0 - env: - SLACK_TITLE: 'React Native publish failed' - SLACK_COLOR: '#FF0000' - SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }} - SLACK_CHANNEL: feed-react-native-publish-failures - - finalize: - name: Cleanup - runs-on: ubuntu-latest - needs: - - update - - test - - publish - if: always() - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Remove temporary branch - env: - TMP_BRANCH_NAME: ${{ needs.update.outputs.tmpBranch }} - run: | - git push --delete origin "$TMP_BRANCH_NAME" diff --git a/.gitignore b/.gitignore index 0c25a906..2595a624 100644 --- a/.gitignore +++ b/.gitignore @@ -1,85 +1,7 @@ -# OSX -# .DS_Store - -# XDE -.expo/ - -# VSCode .vscode/ jsconfig.json - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate -project.xcworkspace - -# Android/IJ -# -.classpath -.cxx -.gradle -.idea -.project -.settings -local.properties -android.iml - -# Cocoapods -# -example/ios/Pods - -# Ruby -example/vendor/ - -# node.js -# node_modules/ -npm-debug.log -yarn-debug.log -yarn-error.log - -# BUCK -buck-out/ -\.buckd/ -android/app/libs -android/keystores/debug.keystore - -# Yarn +lib/ .yarn/* -!.yarn/patches -!.yarn/plugins !.yarn/releases -!.yarn/sdks -!.yarn/versions - -# Expo -.expo/ - -# Turborepo -.turbo/ - -# generated by bob -lib/ - -# config plugin output -!plugin/build - -# development client -example/client/* -engines \ No newline at end of file diff --git a/.nvmrc b/.nvmrc deleted file mode 100644 index fb3e6603..00000000 --- a/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -v18.20.2 diff --git a/.ruby-version b/.ruby-version deleted file mode 100644 index ef538c28..00000000 --- a/.ruby-version +++ /dev/null @@ -1 +0,0 @@ -3.1.2 diff --git a/.versions/engine b/.versions/engine deleted file mode 100644 index 1e221af8..00000000 --- a/.versions/engine +++ /dev/null @@ -1 +0,0 @@ -c74f8976aaa3212c16a61537319f9024d0c21e85 \ No newline at end of file diff --git a/.versions/prisma-dev b/.versions/prisma-dev deleted file mode 100644 index 04153423..00000000 --- a/.versions/prisma-dev +++ /dev/null @@ -1 +0,0 @@ -6.1.0-dev.17 \ No newline at end of file diff --git a/.versions/prisma-latest b/.versions/prisma-latest deleted file mode 100644 index 5fe60723..00000000 --- a/.versions/prisma-latest +++ /dev/null @@ -1 +0,0 @@ -6.0.1 diff --git a/.watchmanconfig b/.watchmanconfig deleted file mode 100644 index 0967ef42..00000000 --- a/.watchmanconfig +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/README.md b/README.md index bf623007..aec92abd 100644 --- a/README.md +++ b/README.md @@ -1,184 +1,72 @@ -# Early Access: Prisma ORM for React Native and Expo +# Prisma 7 for React Native -A Prisma engine adaptation for React Native. Please note that this is in [Early Access](https://www.prisma.io/docs/orm/more/releases#early-access) +Synchronous Prisma model operations for React Native. The package contains: -## Installation +- a synchronous Prisma 7 runtime extension; +- a small synchronous driver contract for local databases; +- an Expo SQLite implementation powered by `expo-sqlite` sync APIs. -Install `@prisma/client`, `@prisma/react-native` and the `react-native-quick-base64` dependency: +Prisma still supports its usual database providers. Only a local driver that implements the synchronous contract can return immediately; network databases such as PostgreSQL and MySQL should remain behind an API and use asynchronous I/O. -``` -npm i --save --save-exact @prisma/client@latest @prisma/react-native@latest react-native-quick-base64 -``` - -To ensure migration files are copied into the app bundle you need to either enable the Expo plugin or configure ios and Android manually: - -### Expo - -If you are using Expo, you can add the expo plugin to automatically copy migration files. Modify your `app.json` by adding the react-native-prisma plugin: - -```json -{ - "expo": { - // ... The rest of your expo config - "plugins": ["@prisma/react-native"] - } -} -``` - -To activate the plugin, run prebuild: - -``` -npx expo prebuild --clean -``` - -The Expo plugin simply configures the Android and ios projects during the prebuild phase. If you are not using Expo, you can do this manually: +## Install +Versions of `prisma` and `@prisma/client` must match this package exactly. -### iOS - -Go into `Xcode` → `Build Phases` → `Bundle React Native Code and images` and modify it so that it looks like this: - -![xcode_build_phases](xcode.png) - -```bash -set -e - -WITH_ENVIRONMENT="../node_modules/react-native/scripts/xcode/with-environment.sh" -REACT_NATIVE_XCODE="../node_modules/react-native/scripts/react-native-xcode.sh" -PRISMA_MIGRATIONS="../node_modules/@prisma/react-native/copy-migrations.sh" # Add this - -/bin/sh -c "$WITH_ENVIRONMENT $PRISMA_MIGRATIONS $REACT_NATIVE_XCODE" # Add it to the list of running scripts -``` - -### Android - -For Android you need to modify your apps `app/Build.gradle`. Add the following at the top of the file. - -```groovy -apply from: "../../node_modules/@prisma/react-native/react-native-prisma.gradle" +```sh +bun add @prisma/client@7.9.1 github:song-react/react-native-prisma expo-sqlite +bun add -d prisma@7.9.1 ``` -## Enable React Native support in your schema file +Prisma 7's query compiler uses WebAssembly. Use a React Native JavaScript runtime with WebAssembly support; Hermes is not supported by this package. -React Native support is currently a preview feature and has to be activated in your schema.prisma file. You can place this file in the root of the application: +## Generate the client -```ts +```prisma generator client { - provider = "prisma-client-js" - previewFeatures = ["reactNative"] + provider = "prisma-client" + output = "../generated/prisma" } datasource db { provider = "sqlite" - url = "file:./app.db" -} - -// Your data model - -model User { - id Int @id @default(autoincrement()) - name String } ``` -You can create the database file and initial migration using Prisma migrate: - -``` -npx prisma@latest migrate dev -``` - - -you can now generate the Prisma Client like this: - -``` -npx prisma@latest generate -``` - -## Reactive queries - -This package contains an extension to the Prisma client that allows you to use reactive queries. Use at your own convenience and care since it might introduce large re-renders in your app. - -```ts -import { PrismaClient } from '@prisma/client/react-native'; -import { reactiveHooksExtension } from '@prisma/react-native'; - -const baseClient = new PrismaClient(); - -export const extendedClient = baseClient.$extends(reactiveHooksExtension()); -``` - -Then in your React component you can use the hook: - -```tsx -import { Text } from 'react-native'; -import { extendedClient } from './myDbModule'; - -export default function App { - - // Will automatically re-render the component with new data - const users = extendedClient.user.useFindMany(); +Generate and prepare the client for React Native: - return ( - { users } - ) +```json +{ + "scripts": { + "prisma:generate": "prisma generate && prisma-react-native generated/prisma" + } } ``` -Bear in mind, for the reactive queries to work you have to use the extended client to modify the data: - -```ts -extendedClient.user.create({ ...userData }); -``` - -There are several hooks you can use for your reactive queries: - -```ts -useFindMany(); -useFindFirst(); -useFindUnique(); -``` - -### Non hook reactive queries +`prisma-react-native` removes Node-only imports from the generated client. Run it after every `prisma generate`. -It is also possible to use callbacks for this queries in case you are not using hooks, but you still want to get notified when data changes +## Use Expo SQLite ```ts -import { PrismaClient } from '@prisma/client/react-native'; -import { reactiveQueriesExtension } from '@prisma/react-native'; +import { PrismaClient } from './generated/prisma/client'; +import { synchronousQueriesExtension } from '@prisma/react-native'; +import { PrismaExpoSQLite } from '@prisma/react-native/expo-sqlite'; -const baseClient = new PrismaClient(); +const adapter = new PrismaExpoSQLite('app.db'); +const client = new PrismaClient({ adapter }); -export const extendedClient = baseClient.$extends(reactiveQueriesExtension()); +export const db = client.$extends(synchronousQueriesExtension()); +export const initializeDatabase = () => client.$connect(); ``` -## Applying migrations - -On application start you need to run the migrations to make sure the database is in a consistent state with your Prisma generated client: +Call `initializeDatabase()` once during app startup. After it resolves, model operations return values directly: ```ts -import '@prisma/react-native'; -import { PrismaClient } from '@prisma/client/react-native'; - -const baseClient = new PrismaClient(); - -async function initializeDb() { - try { - baseClient.$applyPendingMigrations(); - } catch (e) { - console.error(`failed to apply migrations: ${e}`); - throw new Error( - 'Applying migrations failed, your app is now in an inconsistent state. We cannot guarantee safety, it is now your responsibility to reset the database or tell the user to re-install the app' - ); - } -} +const created = db.user.create({ data: { name: 'Ada' } }); +const users = db.user.findMany(); ``` -Care must be taken to ensure migrations will always succeed. Migrations will be executed on the users device at runtime, and if they fail to run, your application will most likely be unable to work correctly. In such a situation, the only option for the user might be to delete all app data and start over. - -## Material - -🎥 Watch the introduction at App.js here: https://www.youtube.com/watch?v=keZYUjAYSJM +Reads, writes, aggregates, relation queries, and query-plan transactions are synchronous. Failed nested writes roll back synchronously. For idempotent startup SQL, run `adapter.executeScriptSync(sql)` before connecting the client. -📖 Read the announcement post here: https://www.prisma.io/blog/bringing-prisma-orm-to-react-native-and-expo +## Other local databases -📹 Watch Catalin build an app with Prisma and Expo here: https://www.youtube.com/watch?v=65Iqes0lxpQ +Implement and pass a normal Prisma driver adapter that also satisfies `SynchronousDriverAdapter`. Its query, write, and transaction methods must execute synchronously. No database-specific code is built into the synchronous extension. diff --git a/android/CMakeLists.txt b/android/CMakeLists.txt deleted file mode 100644 index 65ad3a33..00000000 --- a/android/CMakeLists.txt +++ /dev/null @@ -1,54 +0,0 @@ -cmake_minimum_required(VERSION 3.9.0) -project(Prisma) - -set (PACKAGE_NAME "react-native-prisma") -set (CMAKE_VERBOSE_MAKEFILE ON) -set (CMAKE_CXX_STANDARD 17) -set (BUILD_DIR ${CMAKE_SOURCE_DIR}/build) - - -add_library( - ${PACKAGE_NAME} - SHARED - ../cpp/react-native-prisma.cpp - ../cpp/macros.h - ../cpp/QueryEngineHostObject.cpp - ../cpp/QueryEngineHostObject.h - ../cpp/react-native-prisma.h - ../cpp/ThreadPool.cpp - ../cpp/ThreadPool.h - ../cpp/utils.h - ../cpp/utils.cpp - ../engines/android/query_engine.h - cpp-adapter.cpp -) - -include_directories( - ../cpp - ../engines/android -) - -set_target_properties( - ${PACKAGE_NAME} PROPERTIES - CXX_STANDARD 17 - CXX_EXTENSIONS OFF - POSITION_INDEPENDENT_CODE ON -) - -find_package(ReactAndroid REQUIRED CONFIG) -find_package(fbjni REQUIRED CONFIG) - -cmake_path(SET QUERY_ENGINE_LIB ${CMAKE_CURRENT_SOURCE_DIR}/../engines/android/jniLibs/${ANDROID_ABI}/libquery_engine.a NORMALIZE) - -add_library(query_engine STATIC IMPORTED) -set_target_properties(query_engine PROPERTIES IMPORTED_LOCATION ${QUERY_ENGINE_LIB}) - -target_link_libraries( - ${PACKAGE_NAME} - query_engine - fbjni::fbjni - ReactAndroid::jsi - ReactAndroid::turbomodulejsijni - ReactAndroid::react_nativemodule_core - android -) \ No newline at end of file diff --git a/android/build.gradle b/android/build.gradle deleted file mode 100644 index c169c722..00000000 --- a/android/build.gradle +++ /dev/null @@ -1,162 +0,0 @@ -buildscript { - repositories { - google() - mavenCentral() - } - - dependencies { - classpath "com.android.tools.build:gradle:7.2.1" - } -} - -def isNewArchitectureEnabled() { - return rootProject.hasProperty("newArchEnabled") && rootProject.getProperty("newArchEnabled") == "true" -} - -apply plugin: "com.android.library" - -if (isNewArchitectureEnabled()) { - apply plugin: "com.facebook.react" -} - -def getExtOrDefault(name) { - return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties["Prisma_" + name] -} - -def getExtOrIntegerDefault(name) { - return rootProject.ext.has(name) ? rootProject.ext.get(name) : (project.properties["Prisma_" + name]).toInteger() -} - -def supportsNamespace() { - def parsed = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.') - def major = parsed[0].toInteger() - def minor = parsed[1].toInteger() - - // Namespace support was added in 7.3.0 - return (major == 7 && minor >= 3) || major >= 8 -} - -def resolveBuildType() { - Gradle gradle = getGradle() - String tskReqStr = gradle.getStartParameter().getTaskRequests()['args'].toString() - - return tskReqStr.contains('Release') ? 'release' : 'debug' -} - -android { - if (supportsNamespace()) { - namespace "com.prisma" - - sourceSets { - main { - manifest.srcFile "src/main/AndroidManifestNew.xml" - } - } - } - - // ndkVersion getExtOrDefault("ndkVersion") - compileSdkVersion getExtOrIntegerDefault("compileSdkVersion") - - defaultConfig { - minSdkVersion getExtOrIntegerDefault("minSdkVersion") - targetSdkVersion getExtOrIntegerDefault("targetSdkVersion") - buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString() - - externalNativeBuild { - cmake { - cppFlags "-O2", "-fexceptions", "-frtti", "-DONANDROID", "-lz" - abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a' - arguments '-DANDROID_STL=c++_shared' - } - } - - packagingOptions { - doNotStrip resolveBuildType() == 'debug' ? "**/**/*.so" : '' - excludes = [ - "META-INF", - "META-INF/**", - "**/libjsi.so", - "**/libreact_nativemodule_core.so", - "**/libturbomodulejsijni.so", - "**/libc++_shared.so", - "**/libfbjni.so" - ] - } - } - - externalNativeBuild { - cmake { - path "CMakeLists.txt" - } - } - - buildFeatures { - buildConfig true - prefab true - } - - buildTypes { - release { - minifyEnabled false - } - } - - lintOptions { - disable "GradleCompatible" - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - sourceSets { - main { - if (isNewArchitectureEnabled()) { - java.srcDirs += [ - "src/newarch", - // This is needed to build Kotlin project with NewArch enabled - "${project.buildDir}/generated/source/codegen/java" - ] - } else { - java.srcDirs += ["src/oldarch"] - } - } - } -} - -repositories { - mavenCentral() - google() -} - - -dependencies { - // For < 0.71, this will be from the local maven repo - // For > 0.71, this will be replaced by `com.facebook.react:react-android:$version` by react gradle plugin - //noinspection GradleDynamicVersion - implementation "com.facebook.react:react-native:+" -} - -// Resolves "LOCAL_SRC_FILES points to a missing file, Check that libfb.so exists or that its path is correct". -tasks.whenTaskAdded { task -> - if (task.name.contains("configureCMakeDebug")) { - rootProject.getTasksByName("packageReactNdkDebugLibs", true).forEach { - task.dependsOn(it) - } - } - // We want to add a dependency for both configureCMakeRelease and configureCMakeRelWithDebInfo - if (task.name.contains("configureCMakeRel")) { - rootProject.getTasksByName("packageReactNdkReleaseLibs", true).forEach { - task.dependsOn(it) - } - } -} - -if (isNewArchitectureEnabled()) { - react { - jsRootDir = file("../src/") - libraryName = "Prisma" - codegenJavaPackageName = "com.prisma" - } -} diff --git a/android/cpp-adapter.cpp b/android/cpp-adapter.cpp deleted file mode 100644 index 8957ec53..00000000 --- a/android/cpp-adapter.cpp +++ /dev/null @@ -1,38 +0,0 @@ -#include "react-native-prisma.h" -#include -#include -#include -#include -#include - -namespace jni = facebook::jni; -namespace react = facebook::react; -namespace jsi = facebook::jsi; - -struct PrismaModule : jni::JavaClass { - static constexpr auto kJavaDescriptor = "Lcom/prisma/PrismaModule;"; - - static void registerNatives() { - javaClassStatic()->registerNatives( - {makeNativeMethod("installNativeJsi", PrismaModule::installNativeJsi)}); - } - -private: - static void installNativeJsi( - jni::alias_ref thiz, jlong jsiRuntimePtr, - jni::alias_ref jsCallInvokerHolder, - jni::alias_ref docPath, - jni::alias_ref migrationsPath) { - auto jsiRuntime = reinterpret_cast(jsiRuntimePtr); - auto jsCallInvoker = jsCallInvokerHolder->cthis()->getCallInvoker(); - std::string docPathString = docPath->toStdString(); - std::string migrationsPathString = migrationsPath->toStdString(); - - prisma::install_cxx(*jsiRuntime, jsCallInvoker, docPathString.c_str(), - migrationsPathString.c_str()); - } -}; - -JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *) { - return jni::initialize(vm, [] { PrismaModule::registerNatives(); }); -} \ No newline at end of file diff --git a/android/gradle.properties b/android/gradle.properties deleted file mode 100644 index a59aaeb9..00000000 --- a/android/gradle.properties +++ /dev/null @@ -1,5 +0,0 @@ -Prisma_kotlinVersion=1.7.0 -Prisma_minSdkVersion=21 -Prisma_targetSdkVersion=34 -Prisma_compileSdkVersion=34 -Prisma_ndkversion=21.4.7075529 diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml deleted file mode 100644 index 5605b402..00000000 --- a/android/src/main/AndroidManifest.xml +++ /dev/null @@ -1,3 +0,0 @@ - - diff --git a/android/src/main/AndroidManifestNew.xml b/android/src/main/AndroidManifestNew.xml deleted file mode 100644 index a2f47b60..00000000 --- a/android/src/main/AndroidManifestNew.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/android/src/main/java/com/prisma/PrismaModule.java b/android/src/main/java/com/prisma/PrismaModule.java deleted file mode 100644 index 2b858092..00000000 --- a/android/src/main/java/com/prisma/PrismaModule.java +++ /dev/null @@ -1,149 +0,0 @@ -package com.prisma; - -import android.content.res.AssetManager; -import android.os.Environment; - -import androidx.annotation.NonNull; - -import com.facebook.react.bridge.Promise; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReactMethod; -import com.facebook.react.turbomodule.core.CallInvokerHolderImpl; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - -public class PrismaModule extends PrismaSpec { - public static final String NAME = "Prisma"; - - PrismaModule(ReactApplicationContext context) { - super(context); - } - - @Override - @NonNull - public String getName() { - return NAME; - } - - static { -// System.loadLibrary("query-engine"); - System.loadLibrary("react-native-prisma"); - } - - public static native void installNativeJsi(long jsContextNativePointer, CallInvokerHolderImpl callInvoker, String docPath, String migrationsPath); - - public String copyDirorfileFromAssetManager(String arg_assetDir, String arg_destinationDir) throws IOException - { - String sd_path = getReactApplicationContext().getCacheDir().getAbsolutePath(); - String dest_dir_path = sd_path + addLeadingSlash(arg_destinationDir); - File dest_dir = new File(dest_dir_path); - - createDir(dest_dir); - - AssetManager asset_manager = getReactApplicationContext().getAssets(); - String[] files = asset_manager.list(arg_assetDir); - - for (int i = 0; i < files.length; i++) - { - - String abs_asset_file_path = addTrailingSlash(arg_assetDir) + files[i]; - String sub_files[] = asset_manager.list(abs_asset_file_path); - - if (sub_files.length == 0) - { - // It is a file - String dest_file_path = addTrailingSlash(dest_dir_path) + files[i]; - copyAssetFile(abs_asset_file_path, dest_file_path); - } else - { - // It is a sub directory - copyDirorfileFromAssetManager(abs_asset_file_path, addTrailingSlash(arg_destinationDir) + files[i]); - } - } - - return dest_dir_path; - } - - - public void copyAssetFile(String assetFilePath, String destinationFilePath) throws IOException - { - InputStream in = getReactApplicationContext().getAssets().open(assetFilePath); - OutputStream out = new FileOutputStream(destinationFilePath); - - byte[] buf = new byte[1024]; - int len; - while ((len = in.read(buf)) > 0) - out.write(buf, 0, len); - in.close(); - out.close(); - } - - public String addTrailingSlash(String path) - { - if (path.charAt(path.length() - 1) != '/') - { - path += "/"; - } - return path; - } - - public String addLeadingSlash(String path) - { - if (path.charAt(0) != '/') - { - path = "/" + path; - } - return path; - } - - public void createDir(File dir) throws IOException - { - if (dir.exists()) - { - if (!dir.isDirectory()) - { - throw new IOException("Can't create directory, a file is in the way"); - } - } else - { - dir.mkdirs(); - if (!dir.isDirectory()) - { - throw new IOException("Unable to create directory"); - } - } - } - - @ReactMethod(isBlockingSynchronousMethod = true) - public void install() { - ReactApplicationContext context = this.getReactApplicationContext(); - long jsContextPointer = context.getJavaScriptContextHolder().get(); - if (jsContextPointer == 0) { - throw new RuntimeException("JSI runtime pointer is null. Make sure Hermes is enabled and the runtime is initialized before calling install()."); - } - CallInvokerHolderImpl jsCallInvokerHolder; - if (context.getJSCallInvokerHolder() != null) { - jsCallInvokerHolder = (CallInvokerHolderImpl) context.getJSCallInvokerHolder(); - } else if (context.getCatalystInstance() != null) { - jsCallInvokerHolder = (CallInvokerHolderImpl) context.getCatalystInstance().getJSCallInvokerHolder(); - } else { - throw new RuntimeException("JSCallInvokerHolder is not available yet."); - } - String dbPath = context.getDatabasePath("defaultDatabase").getAbsolutePath().replace("defaultDatabase", ""); - String migrationsPath; - try { - migrationsPath = copyDirorfileFromAssetManager("migrations", "migrations"); - } catch (IOException e) { - throw new RuntimeException(e); - } - installNativeJsi( - jsContextPointer, - jsCallInvokerHolder, - dbPath, migrationsPath - ); - } -} diff --git a/android/src/main/java/com/prisma/PrismaPackage.java b/android/src/main/java/com/prisma/PrismaPackage.java deleted file mode 100644 index cd0f7889..00000000 --- a/android/src/main/java/com/prisma/PrismaPackage.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.prisma; - -import androidx.annotation.Nullable; - -import com.facebook.react.bridge.NativeModule; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.module.model.ReactModuleInfo; -import com.facebook.react.module.model.ReactModuleInfoProvider; -import com.facebook.react.TurboReactPackage; - -import java.util.HashMap; -import java.util.Map; - -public class PrismaPackage extends TurboReactPackage { - - @Nullable - @Override - public NativeModule getModule(String name, ReactApplicationContext reactContext) { - if (name.equals(PrismaModule.NAME)) { - return new PrismaModule(reactContext); - } else { - return null; - } - } - - @Override - public ReactModuleInfoProvider getReactModuleInfoProvider() { - return () -> { - final Map moduleInfos = new HashMap<>(); - boolean isTurboModule = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED; - moduleInfos.put( - PrismaModule.NAME, - new ReactModuleInfo( - PrismaModule.NAME, - PrismaModule.NAME, - false, // canOverrideExistingModule - false, // needsEagerInit - true, // hasConstants - false, // isCxxModule - isTurboModule // isTurboModule - )); - return moduleInfos; - }; - } -} diff --git a/android/src/newarch/PrismaSpec.java b/android/src/newarch/PrismaSpec.java deleted file mode 100644 index 442b4972..00000000 --- a/android/src/newarch/PrismaSpec.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.prisma; - -import com.facebook.react.bridge.ReactApplicationContext; - -abstract class PrismaSpec extends NativePrismaSpec { - PrismaSpec(ReactApplicationContext context) { - super(context); - } -} diff --git a/android/src/oldarch/PrismaSpec.java b/android/src/oldarch/PrismaSpec.java deleted file mode 100644 index dd3e1069..00000000 --- a/android/src/oldarch/PrismaSpec.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.prisma; - -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReactContextBaseJavaModule; -import com.facebook.react.bridge.Promise; - -abstract class PrismaSpec extends ReactContextBaseJavaModule { - PrismaSpec(ReactApplicationContext context) { - super(context); - } - - public abstract void install(); -} diff --git a/app.plugin.js b/app.plugin.js deleted file mode 100644 index 3ae4fa6e..00000000 --- a/app.plugin.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./expo'); diff --git a/babel.config.js b/babel.config.js deleted file mode 100644 index 21769e85..00000000 --- a/babel.config.js +++ /dev/null @@ -1,4 +0,0 @@ -/* eslint-env node */ -module.exports = { - presets: ['module:@react-native/babel-preset'], -}; diff --git a/copy-migrations.sh b/copy-migrations.sh deleted file mode 100755 index e97a21dd..00000000 --- a/copy-migrations.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -echo "Copying prisma migration files..." - -MIGRATIONS_TARGET=${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH} - -rm -rf "$MIGRATIONS_TARGET/migrations" -cp -r ${SRCROOT}/../prisma/migrations "${MIGRATIONS_TARGET}/migrations" - -echo "migration files copied ✅" \ No newline at end of file diff --git a/cpp/QueryEngineHostObject.cpp b/cpp/QueryEngineHostObject.cpp deleted file mode 100644 index 8fa6c038..00000000 --- a/cpp/QueryEngineHostObject.cpp +++ /dev/null @@ -1,14 +0,0 @@ -#include "QueryEngineHostObject.h" - -namespace prisma { -namespace jsi = facebook::jsi; - -QueryEngineHostObject::QueryEngineHostObject( - std::string id, std::function log_callback) { - this->id = id; - this->log_callback = log_callback; -} - -void QueryEngineHostObject::setEngine(QueryEngine *ptr) { this->engine = ptr; } - -} // namespace prisma diff --git a/cpp/QueryEngineHostObject.h b/cpp/QueryEngineHostObject.h deleted file mode 100644 index fa78dada..00000000 --- a/cpp/QueryEngineHostObject.h +++ /dev/null @@ -1,31 +0,0 @@ - -#ifndef query_engine_host_object_h -#define query_engine_host_object_h - -#include -#if TARGET_OS_SIMULATOR -#include "../engines/ios/QueryEngine.xcframework/ios-arm64_x86_64-simulator/Headers/query_engine.h" -#else -#include "../engines/ios/QueryEngine.xcframework/ios-arm64/Headers/query_engine.h" -#endif -#include -#include -#include - -namespace prisma { -namespace jsi = facebook::jsi; - -class JSI_EXPORT QueryEngineHostObject : public jsi::HostObject { -public: - QueryEngineHostObject(std::string id, - std::function log_callback); - - void setEngine(QueryEngine *ptr); - - std::string id; - std::function log_callback; - QueryEngine *engine; -}; -} // namespace prisma - -#endif diff --git a/cpp/ThreadPool.cpp b/cpp/ThreadPool.cpp deleted file mode 100644 index 9a4c1b72..00000000 --- a/cpp/ThreadPool.cpp +++ /dev/null @@ -1,117 +0,0 @@ -#include "ThreadPool.h" - -namespace prisma { - -ThreadPool::ThreadPool() : done(false) { - // This returns the number of threads supported by the system. If the - // function can't figure out this information, it returns 0. 0 is not good, - // so we create at least 1 - auto numberOfThreads = std::thread::hardware_concurrency(); - if (numberOfThreads == 0) { - numberOfThreads = 1; - } - - for (unsigned i = 0; i < numberOfThreads; ++i) { - // The threads will execute the private member `doWork`. Note that we need - // to pass a reference to the function (namespaced with the class name) as - // the first argument, and the current object as second argument - threads.push_back(std::thread(&ThreadPool::doWork, this)); - } -} - -// The destructor joins all the threads so the program can exit gracefully. -// This will be executed if there is any exception (e.g. creating the threads) -ThreadPool::~ThreadPool() { - // So threads know it's time to shut down - done = true; - - // Wake up all the threads, so they can finish and be joined - workQueueConditionVariable.notify_all(); - - for (auto &thread : threads) { - if (thread.joinable()) { - thread.join(); - } - } - - threads.clear(); -} - -// This function will be called by the server every time there is a request -// that needs to be processed by the thread pool -void ThreadPool::queueWork(std::function task) { - // Grab the mutex - std::lock_guard g(workQueueMutex); - - // Push the request to the queue - workQueue.push(task); - - // Notify one thread that there are requests to process - workQueueConditionVariable.notify_one(); -} - -// Function used by the threads to grab work from the queue -void ThreadPool::doWork() { - // Loop while the queue is not destructing - while (!done) { - std::function task; - - // Create a scope, so we don't lock the queue for longer than necessary - { - std::unique_lock g(workQueueMutex); - workQueueConditionVariable.wait(g, [&] { - // Only wake up if there are elements in the queue or the program is - // shutting down - return !workQueue.empty() || done; - }); - - // If we are shutting down exit witout trying to process more work - if (done) { - break; - } - - task = workQueue.front(); - workQueue.pop(); - } - ++busy; - task(); - --busy; - } -} - -void ThreadPool::waitFinished() { - std::unique_lock g(workQueueMutex); - workQueueConditionVariable.wait( - g, [&] { return workQueue.empty() && (busy == 0); }); -} - -void ThreadPool::restartPool() { - // So threads know it's time to shut down - done = true; - - // Wake up all the threads, so they can finish and be joined - workQueueConditionVariable.notify_all(); - - for (auto &thread : threads) { - if (thread.joinable()) { - thread.join(); - } - } - - threads.clear(); - - auto numberOfThreads = std::thread::hardware_concurrency(); - if (numberOfThreads == 0) { - numberOfThreads = 1; - } - - for (unsigned i = 0; i < numberOfThreads; ++i) { - // The threads will execute the private member `doWork`. Note that we need - // to pass a reference to the function (namespaced with the class name) as - // the first argument, and the current object as second argument - threads.push_back(std::thread(&ThreadPool::doWork, this)); - } - - done = false; -} -} // namespace prisma diff --git a/cpp/ThreadPool.h b/cpp/ThreadPool.h deleted file mode 100644 index f368a9f3..00000000 --- a/cpp/ThreadPool.h +++ /dev/null @@ -1,47 +0,0 @@ -#ifndef ThreadPool_h -#define ThreadPool_h - -#include -#include -#include -#include -#include -#include -#include - -namespace prisma { - -class ThreadPool { -public: - ThreadPool(); - ~ThreadPool(); - void queueWork(std::function task); - void waitFinished(); - void restartPool(); - -private: - unsigned int busy; - // This condition variable is used for the threads to wait until there is work - // to do - std::condition_variable_any workQueueConditionVariable; - - // We store the threads in a vector, so we can later stop them gracefully - std::vector threads; - - // Mutex to protect workQueue - std::mutex workQueueMutex; - - // Queue of requests waiting to be processed - std::queue> workQueue; - - // This will be set to true when the thread pool is shutting down. This tells - // the threads to stop looping and finish - bool done; - - // Function used by the threads to grab work from the queue - void doWork(); -}; - -} // namespace prisma - -#endif /* ThreadPool_h */ diff --git a/cpp/macros.h b/cpp/macros.h deleted file mode 100644 index 592e0c4e..00000000 --- a/cpp/macros.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef macros_h -#define macros_h - -#define HOSTFN(name, basecount) \ -jsi::Function::createFromHostFunction( \ -rt, \ -jsi::PropNameID::forAscii(rt, name), \ -basecount, \ -[=](jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) -> jsi::Value - -#endif /* macros_h */ diff --git a/cpp/react-native-prisma.cpp b/cpp/react-native-prisma.cpp deleted file mode 100644 index 8cdd1ef0..00000000 --- a/cpp/react-native-prisma.cpp +++ /dev/null @@ -1,322 +0,0 @@ -#include "react-native-prisma.h" -#include "QueryEngineHostObject.h" -#include "ThreadPool.h" -#include "macros.h" -#include "query_engine.h" -#include "utils.h" -#include -#include -#include - -namespace prisma { - -namespace jsi = facebook::jsi; - -static std::string base_path; -std::string migrations_path; -std::shared_ptr call_invoker; -std::unordered_map> - engine_map; -ThreadPool thread_pool; - -static void free_engine_string(const char *value) { - if (value != nullptr) { - free(const_cast(value)); - } -} - -// Pure C function that is used by Rust to call the log callback -extern void log_callback(const char *id, const char *msg) { - if (engine_map.count(id)) { - auto engine = engine_map[id]; - engine->log_callback(msg); - } -} - -void install_cxx(jsi::Runtime &rt, - std::shared_ptr call_invoker_param, - const char *base_path_param, - const char *migrations_path_param) { - base_path = std::string(base_path_param); - migrations_path = std::string(migrations_path_param); - call_invoker = call_invoker_param; - - auto create = HOSTFN("create", 1) { - // Rust will return a pointer to the internal struct, C++ has nothing to do - // with this it will only be passed to the stateless functions - QueryEngine *ptr; - // Each query engine requires a unique id to route the logging messages - std::string id = get_uuid(); - - jsi::Object params = args[0].asObject(rt); - - std::string datamodel = - params.getProperty(rt, "datamodel").asString(rt).utf8(rt); - std::string log_level = - params.getProperty(rt, "logLevel").asString(rt).utf8(rt); - bool log_queries = params.getProperty(rt, "logQueries").asBool(); - std::shared_ptr js_log_callback = - std::make_shared(params.getProperty(rt, "logCallback")); - bool ignore_env_var_errors = - params.getProperty(rt, "ignoreEnvVarErrors").asBool(); - std::string env = params.getProperty(rt, "env").asString(rt).utf8(rt); - std::string datasource_overrides = - params.getProperty(rt, "datasourceOverrides").asString(rt).utf8(rt); - - ConstructorOptionsNative nativeOptions = ConstructorOptionsNative{""}; - ConstructorOptions options = - ConstructorOptions{.id = id.c_str(), - .datamodel = datamodel.c_str(), - .base_path = base_path.c_str(), - .log_level = log_level.c_str(), - .log_queries = log_queries, - .datasource_overrides = datasource_overrides.c_str(), - .env = env.c_str(), - .ignore_env_var_errors = ignore_env_var_errors, - .native = nativeOptions, - .log_callback = &log_callback}; - - char *error_ptr; - - int prisma_res = prisma_create(options, &ptr, &error_ptr); - - if (prisma_res != PRISMA_OK) { - auto error_string = std::string(error_ptr); - free(error_ptr); - throw std::runtime_error("Failed to create prisma engine: " + - error_string); - } - - auto log_callback_fn = [&rt, js_log_callback](std::string msg) { - call_invoker->invokeAsync([&rt, msg, js_log_callback] { - js_log_callback->asObject(rt).asFunction(rt).call( - rt, jsi::String::createFromUtf8(rt, msg)); - }); - }; - - QueryEngineHostObject engineHostObject = - QueryEngineHostObject(id, log_callback_fn); - - engineHostObject.setEngine(ptr); - - auto engine = std::make_shared(engineHostObject); - engine_map[id] = engine; - - return jsi::Object::createFromHostObject(rt, engine); - }); - - auto connect = HOSTFN("connect", 2) { - std::shared_ptr queryEngineHostObject = - args[0].asObject(rt).asHostObject(rt); - std::string trace = args[1].asString(rt).utf8(rt); - char *error_ptr; - - int result = prisma_connect(queryEngineHostObject->engine, trace.c_str(), - &error_ptr); - if (result != PRISMA_OK) { - std::string error_message(error_ptr); - free(error_ptr); - throw std::runtime_error(error_message); - } - return {}; - }); - - auto execute = HOSTFN("execute", 4) { - std::shared_ptr queryEngineHostObject = - args[0].asObject(rt).asHostObject(rt); - std::string body = args[1].asString(rt).utf8(rt); - std::string trace = args[2].asString(rt).utf8(rt); - std::string tx_id; - if (count > 3 && args[3].isString()) { - tx_id = args[3].asString(rt).utf8(rt); - } - - auto promise_constructor = rt.global().getPropertyAsFunction(rt, "Promise"); - - auto promise = promise_constructor.callAsConstructor(rt, HOSTFN("executor", 2) { - auto resolve = std::make_shared(rt, args[0]); - auto reject = std::make_shared(rt, args[1]); - - auto task = [&rt, queryEngineHostObject, body = std::move(body), - trace = std::move(trace), tx_id = std::move(tx_id), resolve, - reject]() { - const char *response; - char *error_ptr; - - if (!tx_id.empty()) { - response = prisma_query(queryEngineHostObject->engine, body.c_str(), - trace.c_str(), tx_id.c_str(), &error_ptr); - } else { - response = prisma_query(queryEngineHostObject->engine, body.c_str(), - trace.c_str(), nullptr, &error_ptr); - } - - call_invoker->invokeAsync([&rt, response = std::move(response), - error_ptr, resolve, reject]() { - if (error_ptr == nullptr) { - auto js_response = jsi::String::createFromUtf8(rt, response); - free_engine_string(response); - resolve->asObject(rt).asFunction(rt).call( - rt, std::move(js_response)); - } else { - auto errCtr = rt.global().getPropertyAsFunction(rt, "Error"); - std::string error_message(error_ptr); - free(error_ptr); - - auto error = errCtr.callAsConstructor( - rt, jsi::String::createFromUtf8(rt, error_message)); - - reject->asObject(rt).asFunction(rt).call(rt, error); - } - }); - }; - - thread_pool.queueWork(task); - - return {}; - })); - - return promise; - }); - - auto execute_sync = HOSTFN("executeSync", 4) { - std::shared_ptr queryEngineHostObject = - args[0].asObject(rt).asHostObject(rt); - std::string body = args[1].asString(rt).utf8(rt); - std::string trace = args[2].asString(rt).utf8(rt); - std::string tx_id; - if (count > 3 && args[3].isString()) { - tx_id = args[3].asString(rt).utf8(rt); - } - - const char *response = nullptr; - char *error_ptr = nullptr; - - if (!tx_id.empty()) { - response = prisma_query(queryEngineHostObject->engine, body.c_str(), - trace.c_str(), tx_id.c_str(), &error_ptr); - } else { - response = prisma_query(queryEngineHostObject->engine, body.c_str(), - trace.c_str(), nullptr, &error_ptr); - } - - if (error_ptr == nullptr) { - auto js_response = jsi::String::createFromUtf8(rt, response); - free_engine_string(response); - return js_response; - } - - std::string error_message(error_ptr); - free(error_ptr); - throw std::runtime_error(error_message); - }); - - auto start_transaction = HOSTFN("startTransaction", 3) { - std::shared_ptr queryEngineHostObject = - args[0].asObject(rt).asHostObject(rt); - std::string body = args[1].asString(rt).utf8(rt); - std::string trace = args[2].asString(rt).utf8(rt); - - const char *response = prisma_start_transaction( - queryEngineHostObject->engine, body.c_str(), trace.c_str()); - - if (response == nullptr) { - throw std::runtime_error("prisma engine did not start transaction"); - } - - auto js_response = jsi::String::createFromUtf8(rt, response); - free_engine_string(response); - return js_response; - }); - - auto commit_transaction = HOSTFN("commitTransaction", 3) { - std::shared_ptr queryEngineHostObject = - args[0].asObject(rt).asHostObject(rt); - std::string body = args[1].asString(rt).utf8(rt); - std::string trace = args[2].asString(rt).utf8(rt); - - const char *response = prisma_commit_transaction( - queryEngineHostObject->engine, body.c_str(), trace.c_str()); - - if (response == nullptr) { - throw std::runtime_error("prisma engine did not commit transaction"); - } - - auto js_response = jsi::String::createFromUtf8(rt, response); - free_engine_string(response); - return js_response; - }); - - auto rollback_transaction = HOSTFN("rollbackTransaction", 3) { - std::shared_ptr queryEngineHostObject = - args[0].asObject(rt).asHostObject(rt); - std::string body = args[1].asString(rt).utf8(rt); - std::string trace = args[2].asString(rt).utf8(rt); - - const char *response = prisma_rollback_transaction( - queryEngineHostObject->engine, body.c_str(), trace.c_str()); - - if (response == nullptr) { - throw std::runtime_error("prisma engine did not rollback transaction"); - } - - auto js_response = jsi::String::createFromUtf8(rt, response); - free_engine_string(response); - return js_response; - }); - - auto disconnect = HOSTFN("disconnect", 2) { - std::shared_ptr queryEngineHostObject = - args[0].asObject(rt).asHostObject(rt); - std::string trace = args[1].asString(rt).utf8(rt); - - engine_map.erase(queryEngineHostObject->id); - - int res = prisma_disconnect(queryEngineHostObject->engine, trace.c_str()); - - if (res != PRISMA_OK) { - throw std::runtime_error("Could not disconnect from prisma query engine"); - } - return {}; - }); - - auto apply_pending_migrations = HOSTFN("applyPendingMigrations", 1) { - std::shared_ptr queryEngineHostObject = - args[0].asObject(rt).asHostObject(rt); - char *error_ptr; - int res = prisma_apply_pending_migrations( - queryEngineHostObject->engine, migrations_path.c_str(), &error_ptr); - - if (res != PRISMA_OK) { - auto error_string = std::string(error_ptr); - free(error_ptr); - throw std::runtime_error(error_string); - } - - return {}; - }); - - jsi::Object module = jsi::Object(rt); - module.setProperty(rt, "create", std::move(create)); - module.setProperty(rt, "connect", std::move(connect)); - module.setProperty(rt, "execute", std::move(execute)); - module.setProperty(rt, "executeSync", std::move(execute_sync)); - module.setProperty(rt, "startTransaction", std::move(start_transaction)); - module.setProperty(rt, "commitTransaction", std::move(commit_transaction)); - module.setProperty(rt, "rollbackTransaction", - std::move(rollback_transaction)); - module.setProperty(rt, "disconnect", std::move(disconnect)); - module.setProperty(rt, "applyPendingMigrations", - std::move(apply_pending_migrations)); - - rt.global().setProperty(rt, "__PrismaProxy", std::move(module)); -} - -void invalidate() { - for (auto &engine : engine_map) { - prisma_destroy(engine.second->engine); - } - engine_map.clear(); -} - -} // namespace prisma diff --git a/cpp/react-native-prisma.h b/cpp/react-native-prisma.h deleted file mode 100644 index 316a921f..00000000 --- a/cpp/react-native-prisma.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef PRISMA_H -#define PRISMA_H - -#include -#include - -namespace prisma { - -namespace jsi = facebook::jsi; -namespace react = facebook::react; - -void install_cxx(jsi::Runtime &rt, - std::shared_ptr jsCallInvoker, - const char *basePathStr, const char *migrations_path); -void invalidate(); -} // namespace prisma - -#endif /* PRISMA_H */ diff --git a/cpp/utils.cpp b/cpp/utils.cpp deleted file mode 100644 index 6e19c16b..00000000 --- a/cpp/utils.cpp +++ /dev/null @@ -1,23 +0,0 @@ -#include "utils.h" -#include -#include - -// Semi random function, more than enough for our purposes -std::string get_uuid() { - static std::random_device dev; - static std::mt19937 rng(dev()); - - std::uniform_int_distribution dist(0, 15); - - const char *v = "0123456789abcdef"; - const bool dash[] = {0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0}; - - std::string res; - for (int i = 0; i < 16; i++) { - if (dash[i]) - res += "-"; - res += v[dist(rng)]; - res += v[dist(rng)]; - } - return res; -} \ No newline at end of file diff --git a/cpp/utils.h b/cpp/utils.h deleted file mode 100644 index d1d5ab02..00000000 --- a/cpp/utils.h +++ /dev/null @@ -1,4 +0,0 @@ -#pragma once -#include - -std::string get_uuid(); \ No newline at end of file diff --git a/example/.bundle/config b/example/.bundle/config deleted file mode 100644 index 848943bb..00000000 --- a/example/.bundle/config +++ /dev/null @@ -1,2 +0,0 @@ -BUNDLE_PATH: "vendor/bundle" -BUNDLE_FORCE_RUBY_PLATFORM: 1 diff --git a/example/.detoxrc.js b/example/.detoxrc.js deleted file mode 100644 index e26ba46a..00000000 --- a/example/.detoxrc.js +++ /dev/null @@ -1,50 +0,0 @@ -/** @type {Detox.DetoxConfig} */ -module.exports = { - testRunner: { - args: { - $0: 'jest', - config: 'e2e/jest.config.js', - }, - jest: { - setupTimeout: 120000, - }, - }, - apps: { - 'ios.release': { - type: 'ios.app', - binaryPath: 'ios/build/Build/Products/Release-iphonesimulator/Prisma.app', - build: - 'xcodebuild -quiet -workspace ios/PrismaExample.xcworkspace -scheme Release -configuration Release -sdk iphonesimulator -derivedDataPath ios/build', - }, - 'android.release': { - type: 'android.apk', - binaryPath: 'android/app/build/outputs/apk/release/app-release.apk', - build: - 'cd android && ./gradlew assembleRelease assembleAndroidTest -DtestBuildType=release && cd ..', - }, - }, - devices: { - simulator: { - type: 'ios.simulator', - device: { - type: 'iPhone 15', - }, - }, - emulator: { - type: 'android.emulator', - device: { - avdName: 'Pixel_API_28', - }, - }, - }, - configurations: { - 'ios.sim.release': { - device: 'simulator', - app: 'ios.release', - }, - 'android.emu.release': { - device: 'emulator', - app: 'android.release', - }, - }, -}; diff --git a/example/.ruby-version b/example/.ruby-version deleted file mode 100644 index 15a27998..00000000 --- a/example/.ruby-version +++ /dev/null @@ -1 +0,0 @@ -3.3.0 diff --git a/example/.watchmanconfig b/example/.watchmanconfig deleted file mode 100644 index 0967ef42..00000000 --- a/example/.watchmanconfig +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/example/Gemfile b/example/Gemfile deleted file mode 100644 index 7558f393..00000000 --- a/example/Gemfile +++ /dev/null @@ -1,7 +0,0 @@ -source 'https://rubygems.org' - -# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version -ruby ">= 2.6.10" - -gem 'cocoapods', '1.14' -gem 'activesupport', '>= 6.1.7.3', '< 7.1.0' diff --git a/example/Gemfile.lock b/example/Gemfile.lock deleted file mode 100644 index 7b06f222..00000000 --- a/example/Gemfile.lock +++ /dev/null @@ -1,105 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - CFPropertyList (3.0.7) - base64 - nkf - rexml - activesupport (6.1.7.6) - concurrent-ruby (~> 1.0, >= 1.0.2) - i18n (>= 1.6, < 2) - minitest (>= 5.1) - tzinfo (~> 2.0) - zeitwerk (~> 2.3) - addressable (2.8.6) - public_suffix (>= 2.0.2, < 6.0) - algoliasearch (1.27.5) - httpclient (~> 2.8, >= 2.8.3) - json (>= 1.5.1) - atomos (0.1.3) - base64 (0.2.0) - claide (1.1.0) - cocoapods (1.14.0) - addressable (~> 2.8) - claide (>= 1.0.2, < 2.0) - cocoapods-core (= 1.14.0) - cocoapods-deintegrate (>= 1.0.3, < 2.0) - cocoapods-downloader (>= 2.0) - cocoapods-plugins (>= 1.0.0, < 2.0) - cocoapods-search (>= 1.0.0, < 2.0) - cocoapods-trunk (>= 1.6.0, < 2.0) - cocoapods-try (>= 1.1.0, < 2.0) - colored2 (~> 3.1) - escape (~> 0.0.4) - fourflusher (>= 2.3.0, < 3.0) - gh_inspector (~> 1.0) - molinillo (~> 0.8.0) - nap (~> 1.0) - ruby-macho (>= 2.3.0, < 3.0) - xcodeproj (>= 1.23.0, < 2.0) - cocoapods-core (1.14.0) - activesupport (>= 5.0, < 8) - addressable (~> 2.8) - algoliasearch (~> 1.0) - concurrent-ruby (~> 1.1) - fuzzy_match (~> 2.0.4) - nap (~> 1.0) - netrc (~> 0.11) - public_suffix (~> 4.0) - typhoeus (~> 1.0) - cocoapods-deintegrate (1.0.5) - cocoapods-downloader (2.1) - cocoapods-plugins (1.0.0) - nap - cocoapods-search (1.0.1) - cocoapods-trunk (1.6.0) - nap (>= 0.8, < 2.0) - netrc (~> 0.11) - cocoapods-try (1.2.0) - colored2 (3.1.2) - concurrent-ruby (1.2.2) - escape (0.0.4) - ethon (0.16.0) - ffi (>= 1.15.0) - ffi (1.16.3) - fourflusher (2.3.1) - fuzzy_match (2.0.4) - gh_inspector (1.1.3) - httpclient (2.8.3) - i18n (1.14.1) - concurrent-ruby (~> 1.0) - json (2.7.1) - minitest (5.20.0) - molinillo (0.8.0) - nanaimo (0.3.0) - nap (1.1.0) - netrc (0.11.0) - nkf (0.2.0) - public_suffix (4.0.7) - rexml (3.2.6) - ruby-macho (2.5.1) - typhoeus (1.4.1) - ethon (>= 0.9.0) - tzinfo (2.0.6) - concurrent-ruby (~> 1.0) - xcodeproj (1.24.0) - CFPropertyList (>= 2.3.3, < 4.0) - atomos (~> 0.1.3) - claide (>= 1.0.2, < 2.0) - colored2 (~> 3.1) - nanaimo (~> 0.3.0) - rexml (~> 3.2.4) - zeitwerk (2.6.13) - -PLATFORMS - ruby - -DEPENDENCIES - activesupport (>= 6.1.7.3, < 7.1.0) - cocoapods (= 1.14) - -RUBY VERSION - ruby 2.7.6p219 - -BUNDLED WITH - 2.4.2 diff --git a/example/README.md b/example/README.md deleted file mode 100644 index 12470c30..00000000 --- a/example/README.md +++ /dev/null @@ -1,79 +0,0 @@ -This is a new [**React Native**](https://reactnative.dev) project, bootstrapped using [`@react-native-community/cli`](https://github.com/react-native-community/cli). - -# Getting Started - ->**Note**: Make sure you have completed the [React Native - Environment Setup](https://reactnative.dev/docs/environment-setup) instructions till "Creating a new application" step, before proceeding. - -## Step 1: Start the Metro Server - -First, you will need to start **Metro**, the JavaScript _bundler_ that ships _with_ React Native. - -To start Metro, run the following command from the _root_ of your React Native project: - -```bash -# using npm -npm start - -# OR using Yarn -yarn start -``` - -## Step 2: Start your Application - -Let Metro Bundler run in its _own_ terminal. Open a _new_ terminal from the _root_ of your React Native project. Run the following command to start your _Android_ or _iOS_ app: - -### For Android - -```bash -# using npm -npm run android - -# OR using Yarn -yarn android -``` - -### For iOS - -```bash -# using npm -npm run ios - -# OR using Yarn -yarn ios -``` - -If everything is set up _correctly_, you should see your new app running in your _Android Emulator_ or _iOS Simulator_ shortly provided you have set up your emulator/simulator correctly. - -This is one way to run your app — you can also run it directly from within Android Studio and Xcode respectively. - -## Step 3: Modifying your App - -Now that you have successfully run the app, let's modify it. - -1. Open `App.tsx` in your text editor of choice and edit some lines. -2. For **Android**: Press the R key twice or select **"Reload"** from the **Developer Menu** (Ctrl + M (on Window and Linux) or Cmd ⌘ + M (on macOS)) to see your changes! - - For **iOS**: Hit Cmd ⌘ + R in your iOS Simulator to reload the app and see your changes! - -## Congratulations! :tada: - -You've successfully run and modified your React Native App. :partying_face: - -### Now what? - -- If you want to add this new React Native code to an existing application, check out the [Integration guide](https://reactnative.dev/docs/integration-with-existing-apps). -- If you're curious to learn more about React Native, check out the [Introduction to React Native](https://reactnative.dev/docs/getting-started). - -# Troubleshooting - -If you can't get this to work, see the [Troubleshooting](https://reactnative.dev/docs/troubleshooting) page. - -# Learn More - -To learn more about React Native, take a look at the following resources: - -- [React Native Website](https://reactnative.dev) - learn more about React Native. -- [Getting Started](https://reactnative.dev/docs/environment-setup) - an **overview** of React Native and how setup your environment. -- [Learn the Basics](https://reactnative.dev/docs/getting-started) - a **guided tour** of the React Native **basics**. -- [Blog](https://reactnative.dev/blog) - read the latest official React Native **Blog** posts. -- [`@facebook/react-native`](https://github.com/facebook/react-native) - the Open Source; GitHub **repository** for React Native. diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle deleted file mode 100644 index ad320b80..00000000 --- a/example/android/app/build.gradle +++ /dev/null @@ -1,131 +0,0 @@ -apply plugin: "com.android.application" -apply plugin: "org.jetbrains.kotlin.android" -apply plugin: "com.facebook.react" -apply from: "../../../react-native-prisma.gradle" - -/** - * This is the configuration block to customize your React Native Android app. - * By default you don't need to apply any configuration, just uncomment the lines you need. - */ -react { - /* Folders */ - // The root of your project, i.e. where "package.json" lives. Default is '..' - // root = file("../") - // The folder where the react-native NPM package is. Default is ../node_modules/react-native - // reactNativeDir = file("../node_modules/react-native") - // The folder where the react-native Codegen package is. Default is ../node_modules/@react-native/codegen - // codegenDir = file("../node_modules/@react-native/codegen") - // The cli.js file which is the React Native CLI entrypoint. Default is ../node_modules/react-native/cli.js - // cliFile = file("../node_modules/react-native/cli.js") - - /* Variants */ - // The list of variants to that are debuggable. For those we're going to - // skip the bundling of the JS bundle and the assets. By default is just 'debug'. - // If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants. - // debuggableVariants = ["liteDebug", "prodDebug"] - - /* Bundling */ - // A list containing the node command and its flags. Default is just 'node'. - // nodeExecutableAndArgs = ["node"] - // - // The command to run when bundling. By default is 'bundle' - // bundleCommand = "ram-bundle" - // - // The path to the CLI configuration file. Default is empty. - // bundleConfig = file(../rn-cli.config.js) - // - // The name of the generated asset file containing your JS bundle - // bundleAssetName = "MyApplication.android.bundle" - // - // The entry file for bundle generation. Default is 'index.android.js' or 'index.js' - // entryFile = file("../js/MyApplication.android.js") - // - // A list of extra flags to pass to the 'bundle' commands. - // See https://github.com/react-native-community/cli/blob/main/docs/commands.md#bundle - // extraPackagerArgs = [] - - /* Hermes Commands */ - // The hermes compiler command to run. By default it is 'hermesc' - // hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc" - // - // The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map" - // hermesFlags = ["-O", "-output-source-map"] -} - -/** - * Set this to true to Run Proguard on Release builds to minify the Java bytecode. - */ -def enableProguardInReleaseBuilds = false - -/** - * The preferred build flavor of JavaScriptCore (JSC) - * - * For example, to use the international variant, you can use: - * `def jscFlavor = 'org.webkit:android-jsc-intl:+'` - * - * The international variant includes ICU i18n library and necessary data - * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that - * give correct results when using with locales other than en-US. Note that - * this variant is about 6MiB larger per architecture than default. - */ -def jscFlavor = 'org.webkit:android-jsc:+' - -android { - ndkVersion rootProject.ext.ndkVersion - buildToolsVersion rootProject.ext.buildToolsVersion - compileSdk rootProject.ext.compileSdkVersion - - namespace "com.prismaexample" - defaultConfig { - applicationId "com.prismaexample" - minSdkVersion rootProject.ext.minSdkVersion - targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 1 - versionName "1.0" - testBuildType System.getProperty('testBuildType', 'debug') - testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' - } - signingConfigs { - debug { - storeFile file('debug.keystore') - storePassword 'android' - keyAlias 'androiddebugkey' - keyPassword 'android' - } - } - buildTypes { - debug { - signingConfig signingConfigs.debug - } - release { - // Caution! In production, you need to generate your own keystore file. - // see https://reactnative.dev/docs/signed-apk-android. - signingConfig signingConfigs.debug - minifyEnabled enableProguardInReleaseBuilds - proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" - proguardFile "${rootProject.projectDir}/../node_modules/detox/android/detox/proguard-rules-app.pro" - } - } -} - -dependencies { - // The version of react-native is set by the React Native Gradle Plugin - implementation("com.facebook.react:react-android") - implementation("com.facebook.react:flipper-integration") - androidTestImplementation('com.wix:detox:+') - implementation('androidx.appcompat:appcompat:1.1.0') - - if (hermesEnabled.toBoolean()) { - implementation("com.facebook.react:hermes-android") - } else { - implementation jscFlavor - } -} - -configurations.all { - resolutionStrategy { - force 'androidx.test:core:1.5.0' - } -} - -apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) diff --git a/example/android/app/debug.keystore b/example/android/app/debug.keystore deleted file mode 100644 index 364e105ed39fbfd62001429a68140672b06ec0de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2257 zcmchYXEfYt8;7T1^dLH$VOTZ%2NOdOH5j5LYLtZ0q7x-V8_6gU5)#7dkq{HTmsfNq zB3ZqcAxeY^G10@?efK?Q&)M(qInVv!xjx+IKEL}p*K@LYvIzo#AZG>st5|P)KF1_Z;y){W{<7K{nl!CPuE z_^(!C(Ol0n8 zK13*rzAtW>(wULKPRYLd7G18F8#1P`V*9`(Poj26eOXYyBVZPno~Cvvhx7vPjAuZo zF?VD!zB~QG(!zbw#qsxT8%BSpqMZ4f70ZPn-3y$L8{EVbbN9$H`B&Z1quk9tgp5FM zuxp3pJ0b8u|3+#5bkJ4SRnCF2l7#DyLYXYY8*?OuAwK4E6J{0N=O3QNVzQ$L#FKkR zi-c@&!nDvezOV$i$Lr}iF$XEcwnybQ6WZrMKuw8gCL^U#D;q3t&HpTbqyD%vG=TeDlzCT~MXUPC|Leb-Uk+ z=vnMd(|>ld?Fh>V8poP;q;;nc@en$|rnP0ytzD&fFkCeUE^kG9Kx4wUh!!rpjwKDP zyw_e|a^x_w3E zP}}@$g>*LLJ4i0`Gx)qltL}@;mDv}D*xR^oeWcWdPkW@Uu)B^X&4W1$p6}ze!zudJ zyiLg@uggoMIArBr*27EZV7djDg@W1MaL+rcZ-lrANJQ%%>u8)ZMWU@R2qtnmG(acP z0d_^!t>}5W zpT`*2NR+0+SpTHb+6Js4b;%LJB;B_-ChhnU5py}iJtku*hm5F0!iql8Hrpcy1aYbT z1*dKC5ua6pMX@@iONI?Hpr%h;&YaXp9n!ND7-=a%BD7v&g zOO41M6EbE24mJ#S$Ui0-brR5ML%@|ndz^)YLMMV1atna{Fw<;TF@>d&F|!Z>8eg>>hkFrV)W+uv=`^F9^e zzzM2*oOjT9%gLoub%(R57p-`TXFe#oh1_{&N-YN z<}artH|m=d8TQuKSWE)Z%puU|g|^^NFwC#N=@dPhasyYjoy(fdEVfKR@cXKHZV-`06HsP`|Ftx;8(YD$fFXumLWbGnu$GMqRncXYY9mwz9$ap zQtfZB^_BeNYITh^hA7+(XNFox5WMeG_LtJ%*Q}$8VKDI_p8^pqX)}NMb`0e|wgF7D zuQACY_Ua<1ri{;Jwt@_1sW9zzdgnyh_O#8y+C;LcZq6=4e^cs6KvmK@$vVpKFGbQ= z$)Eux5C|Fx;Gtmv9^#Y-g@7Rt7*eLp5n!gJmn7&B_L$G?NCN`AP>cXQEz}%F%K;vUs{+l4Q{}eWW;ATe2 zqvXzxoIDy(u;F2q1JH7Sf;{jy_j})F+cKlIOmNfjBGHoG^CN zM|Ho&&X|L-36f}Q-obEACz`sI%2f&k>z5c$2TyTSj~vmO)BW~+N^kt`Jt@R|s!){H ze1_eCrlNaPkJQhL$WG&iRvF*YG=gXd1IyYQ9ew|iYn7r~g!wOnw;@n42>enAxBv*A zEmV*N#sxdicyNM=A4|yaOC5MByts}s_Hpfj|y<6G=o=!3S@eIFKDdpR7|FY>L&Wat&oW&cm&X~ z5Bt>Fcq(fgnvlvLSYg&o6>&fY`ODg4`V^lWWD=%oJ#Kbad2u~! zLECFS*??>|vDsNR&pH=Ze0Eo`sC_G`OjoEKVHY|wmwlX&(XBE<@sx3Hd^gtd-fNwUHsylg06p`U2y_={u}Bc mActivityRule = new ActivityTestRule<>(MainActivity.class, false, false); - - @Test - public void runDetoxTests() { - DetoxConfig detoxConfig = new DetoxConfig(); - detoxConfig.idlePolicyConfig.masterTimeoutSec = 90; - detoxConfig.idlePolicyConfig.idleResourceTimeoutSec = 60; - detoxConfig.rnContextLoadTimeoutSec = (BuildConfig.DEBUG ? 180 : 60); - - Detox.runTests(mActivityRule, detoxConfig); - } -} \ No newline at end of file diff --git a/example/android/app/src/debug/AndroidManifest.xml b/example/android/app/src/debug/AndroidManifest.xml deleted file mode 100644 index eb98c01a..00000000 --- a/example/android/app/src/debug/AndroidManifest.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml deleted file mode 100644 index 5d684a23..00000000 --- a/example/android/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - diff --git a/example/android/app/src/main/assets/migrations/0_init/migration.sql b/example/android/app/src/main/assets/migrations/0_init/migration.sql deleted file mode 100644 index d2e6651e..00000000 --- a/example/android/app/src/main/assets/migrations/0_init/migration.sql +++ /dev/null @@ -1,53 +0,0 @@ --- CreateTable -CREATE TABLE "User" ( - "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, - "email" TEXT NOT NULL, - "name" TEXT, - "nick" TEXT -); - --- CreateTable -CREATE TABLE "Profile" ( - "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, - "bio" TEXT NOT NULL, - "userId" INTEGER NOT NULL, - CONSTRAINT "Profile_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE -); - --- CreateTable -CREATE TABLE "Post" ( - "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, - "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updatedAt" DATETIME NOT NULL, - "title" TEXT NOT NULL, - "published" BOOLEAN NOT NULL DEFAULT false, - "authorId" INTEGER NOT NULL, - CONSTRAINT "Post_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE -); - --- CreateTable -CREATE TABLE "Category" ( - "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, - "name" TEXT NOT NULL -); - --- CreateTable -CREATE TABLE "_CategoryToPost" ( - "A" INTEGER NOT NULL, - "B" INTEGER NOT NULL, - CONSTRAINT "_CategoryToPost_A_fkey" FOREIGN KEY ("A") REFERENCES "Category" ("id") ON DELETE CASCADE ON UPDATE CASCADE, - CONSTRAINT "_CategoryToPost_B_fkey" FOREIGN KEY ("B") REFERENCES "Post" ("id") ON DELETE CASCADE ON UPDATE CASCADE -); - --- CreateIndex -CREATE UNIQUE INDEX "User_email_key" ON "User"("email"); - --- CreateIndex -CREATE UNIQUE INDEX "Profile_userId_key" ON "Profile"("userId"); - --- CreateIndex -CREATE UNIQUE INDEX "_CategoryToPost_AB_unique" ON "_CategoryToPost"("A", "B"); - --- CreateIndex -CREATE INDEX "_CategoryToPost_B_index" ON "_CategoryToPost"("B"); - diff --git a/example/android/app/src/main/assets/migrations/20240118142005_nick2/migration.sql b/example/android/app/src/main/assets/migrations/20240118142005_nick2/migration.sql deleted file mode 100644 index 6af8f23f..00000000 --- a/example/android/app/src/main/assets/migrations/20240118142005_nick2/migration.sql +++ /dev/null @@ -1,2 +0,0 @@ --- AlterTable -ALTER TABLE "User" ADD COLUMN "nick2" TEXT; diff --git a/example/android/app/src/main/assets/migrations/20240119102352_nick3/migration.sql b/example/android/app/src/main/assets/migrations/20240119102352_nick3/migration.sql deleted file mode 100644 index 42103e81..00000000 --- a/example/android/app/src/main/assets/migrations/20240119102352_nick3/migration.sql +++ /dev/null @@ -1,2 +0,0 @@ --- AlterTable -ALTER TABLE "User" ADD COLUMN "nick3" TEXT; diff --git a/example/android/app/src/main/assets/migrations/20240119143417_nick4/migration.sql b/example/android/app/src/main/assets/migrations/20240119143417_nick4/migration.sql deleted file mode 100644 index 616a6b93..00000000 --- a/example/android/app/src/main/assets/migrations/20240119143417_nick4/migration.sql +++ /dev/null @@ -1,2 +0,0 @@ --- AlterTable -ALTER TABLE "User" ADD COLUMN "nick4" TEXT; diff --git a/example/android/app/src/main/assets/migrations/20240122145141_my_field/migration.sql b/example/android/app/src/main/assets/migrations/20240122145141_my_field/migration.sql deleted file mode 100644 index 17fa170f..00000000 --- a/example/android/app/src/main/assets/migrations/20240122145141_my_field/migration.sql +++ /dev/null @@ -1,2 +0,0 @@ --- AlterTable -ALTER TABLE "User" ADD COLUMN "myField" TEXT; diff --git a/example/android/app/src/main/assets/migrations/migration_lock.toml b/example/android/app/src/main/assets/migrations/migration_lock.toml deleted file mode 100644 index e5e5c470..00000000 --- a/example/android/app/src/main/assets/migrations/migration_lock.toml +++ /dev/null @@ -1,3 +0,0 @@ -# Please do not edit this file manually -# It should be added in your version-control system (i.e. Git) -provider = "sqlite" \ No newline at end of file diff --git a/example/android/app/src/main/java/com/prismaexample/MainActivity.kt b/example/android/app/src/main/java/com/prismaexample/MainActivity.kt deleted file mode 100644 index 5459b2db..00000000 --- a/example/android/app/src/main/java/com/prismaexample/MainActivity.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.prismaexample - -import com.facebook.react.ReactActivity -import com.facebook.react.ReactActivityDelegate -import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled -import com.facebook.react.defaults.DefaultReactActivityDelegate - -class MainActivity : ReactActivity() { - - /** - * Returns the name of the main component registered from JavaScript. This is used to schedule - * rendering of the component. - */ - override fun getMainComponentName(): String = "PrismaExample" - - /** - * Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate] - * which allows you to enable New Architecture with a single boolean flags [fabricEnabled] - */ - override fun createReactActivityDelegate(): ReactActivityDelegate = - DefaultReactActivityDelegate(this, mainComponentName, fabricEnabled) -} diff --git a/example/android/app/src/main/java/com/prismaexample/MainApplication.kt b/example/android/app/src/main/java/com/prismaexample/MainApplication.kt deleted file mode 100644 index b86a256f..00000000 --- a/example/android/app/src/main/java/com/prismaexample/MainApplication.kt +++ /dev/null @@ -1,45 +0,0 @@ -package com.prismaexample - -import android.app.Application -import com.facebook.react.PackageList -import com.facebook.react.ReactApplication -import com.facebook.react.ReactHost -import com.facebook.react.ReactNativeHost -import com.facebook.react.ReactPackage -import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load -import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost -import com.facebook.react.defaults.DefaultReactNativeHost -import com.facebook.react.flipper.ReactNativeFlipper -import com.facebook.soloader.SoLoader - -class MainApplication : Application(), ReactApplication { - - override val reactNativeHost: ReactNativeHost = - object : DefaultReactNativeHost(this) { - override fun getPackages(): List { - // Packages that cannot be autolinked yet can be added manually here, for example: - // packages.add(new MyReactNativePackage()); - return PackageList(this).packages - } - - override fun getJSMainModuleName(): String = "index" - - override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG - - override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED - override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED - } - - override val reactHost: ReactHost - get() = getDefaultReactHost(this.applicationContext, reactNativeHost) - - override fun onCreate() { - super.onCreate() - SoLoader.init(this, false) - if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { - // If you opted-in for the New Architecture, we load the native entry point for this app. - load() - } - ReactNativeFlipper.initializeFlipper(this, reactNativeHost.reactInstanceManager) - } -} diff --git a/example/android/app/src/main/res/drawable/rn_edit_text_material.xml b/example/android/app/src/main/res/drawable/rn_edit_text_material.xml deleted file mode 100644 index 73b37e4d..00000000 --- a/example/android/app/src/main/res/drawable/rn_edit_text_material.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - diff --git a/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index a2f5908281d070150700378b64a84c7db1f97aa1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3056 zcmV(P)KhZB4W`O-$6PEY7dL@435|%iVhscI7#HXTET` zzkBaFzt27A{C?*?2n!1>p(V70me4Z57os7_P3wngt7(|N?Oyh#`(O{OZ1{A4;H+Oi zbkJV-pnX%EV7$w+V1moMaYCgzJI-a^GQPsJHL=>Zb!M$&E7r9HyP>8`*Pg_->7CeN zOX|dqbE6DBJL=}Mqt2*1e1I>(L-HP&UhjA?q1x7zSXD}D&D-Om%sC#AMr*KVk>dy;pT>Dpn#K6-YX8)fL(Q8(04+g?ah97XT2i$m2u z-*XXz7%$`O#x&6Oolq?+sA+c; zdg7fXirTUG`+!=-QudtfOZR*6Z3~!#;X;oEv56*-B z&gIGE3os@3O)sFP?zf;Z#kt18-o>IeueS!=#X^8WfI@&mfI@)!F(BkYxSfC*Gb*AM zau9@B_4f3=m1I71l8mRD>8A(lNb6V#dCpSKW%TT@VIMvFvz!K$oN1v#E@%Fp3O_sQ zmbSM-`}i8WCzSyPl?NqS^NqOYg4+tXT52ItLoTA;4mfx3-lev-HadLiA}!)%PwV)f zumi|*v}_P;*hk9-c*ibZqBd_ixhLQA+Xr>akm~QJCpfoT!u5JA_l@4qgMRf+Bi(Gh zBOtYM<*PnDOA}ls-7YrTVWimdA{y^37Q#BV>2&NKUfl(9F9G}lZ{!-VfTnZh-}vANUA=kZz5}{^<2t=| z{D>%{4**GFekzA~Ja)m81w<3IaIXdft(FZDD2oTruW#SJ?{Iv&cKenn!x!z;LfueD zEgN@#Px>AgO$sc`OMv1T5S~rp@e3-U7LqvJvr%uyV7jUKDBZYor^n# zR8bDS*jTTdV4l8ug<>o_Wk~%F&~lzw`sQGMi5{!yoTBs|8;>L zD=nbWe5~W67Tx`B@_@apzLKH@q=Nnj$a1EoQ%5m|;3}WxR@U0q^=umZUcB}dz5n^8 zPRAi!1T)V8qs-eWs$?h4sVncF`)j&1`Rr+-4of)XCppcuoV#0EZ8^>0Z2LYZirw#G7=POO0U*?2*&a7V zn|Dx3WhqT{6j8J_PmD=@ItKmb-GlN>yH5eJe%-WR0D8jh1;m54AEe#}goz`fh*C%j zA@%m2wr3qZET9NLoVZ5wfGuR*)rV2cmQPWftN8L9hzEHxlofT@rc|PhXZ&SGk>mLC z97(xCGaSV+)DeysP_%tl@Oe<6k9|^VIM*mQ(IU5vme)80qz-aOT3T(VOxU><7R4#;RZfTQeI$^m&cw@}f=eBDYZ+b&N$LyX$Au8*J1b9WPC zk_wIhRHgu=f&&@Yxg-Xl1xEnl3xHOm1xE(NEy@oLx8xXme*uJ-7cg)a=lVq}gm3{! z0}fh^fyW*tAa%6Dcq0I5z(K2#0Ga*a*!mkF5#0&|BxSS`fXa(?^Be)lY0}Me1R$45 z6OI7HbFTOffV^;gfOt%b+SH$3e*q)_&;q0p$}uAcAiX>XkqU#c790SX&E2~lkOB_G zKJ`C9ki9?xz)+Cm2tYb{js(c8o9FleQsy}_Ad5d7F((TOP!GQbT(nFhx6IBlIHLQ zgXXeN84Yfl5^NsSQ!kRoGoVyhyQXsYTgXWy@*K>_h02S>)Io^59+E)h zGFV5n!hjqv%Oc>+V;J$A_ekQjz$f-;Uace07pQvY6}%aIZUZ}_m*>DHx|mL$gUlGo zpJtxJ-3l!SVB~J4l=zq>$T4VaQ7?R}!7V7tvO_bJ8`$|ImsvN@kpXGtISd6|N&r&B zkpY!Z%;q4z)rd81@12)8F>qUU_(dxjkWQYX4XAxEmH?G>4ruF!AX<2qpdqxJ3I!SaZj(bdjDpXdS%NK!YvET$}#ao zW-QD5;qF}ZN4;`6g&z16w|Qd=`#4hg+UF^02UgmQka=%|A!5CjRL86{{mwzf=~v{&!Uo zYhJ00Shva@yJ59^Qq~$b)+5%gl79Qv*Gl#YS+BO+RQrr$dmQX)o6o-P_wHC$#H%aa z5o>q~f8c=-2(k3lb!CqFQJ;;7+2h#B$V_anm}>Zr(v{I_-09@zzZ yco6bG9zMVq_|y~s4rIt6QD_M*p(V5oh~@tmE4?#%!pj)|0000T-ViIFIPY+_yk1-RB&z5bHD$YnPieqLK5EI`ThRCq%$YyeCI#k z>wI&j0Rb2DV5|p6T3Syaq)GU^8BR8(!9qaEe6w+TJxLZtBeQf z`>{w%?oW}WhJSMi-;YIE3P2FtzE8p;}`HCT>Lt1o3h65;M`4J@U(hJSYlTt_?Ucf5~AOFjBT-*WTiV_&id z?xIZPQ`>7M-B?*vptTsj)0XBk37V2zTSQ5&6`0#pVU4dg+Hj7pb;*Hq8nfP(P;0i% zZ7k>Q#cTGyguV?0<0^_L$;~g|Qqw58DUr~LB=oigZFOvHc|MCM(KB_4-l{U|t!kPu z{+2Mishq{vnwb2YD{vj{q`%Pz?~D4B&S9Jdt##WlwvtR2)d5RdqcIvrs!MY#BgDI# z+FHxTmgQp-UG66D4?!;I0$Csk<6&IL09jn+yWmHxUf)alPUi3jBIdLtG|Yhn?vga< zJQBnaQ=Z?I+FZj;ke@5f{TVVT$$CMK74HfIhE?eMQ#fvN2%FQ1PrC+PAcEu?B*`Ek zcMD{^pd?8HMV94_qC0g+B1Z0CE-pcWpK=hDdq`{6kCxxq^X`oAYOb3VU6%K=Tx;aG z*aW$1G~wsy!mL})tMisLXN<*g$Kv)zHl{2OA=?^BLb)Q^Vqgm?irrLM$ds;2n7gHt zCDfI8Y=i4)=cx_G!FU+g^_nE(Xu7tj&a&{ln46@U3)^aEf}FHHud~H%_0~Jv>X{Pm z+E&ljy!{$my1j|HYXdy;#&&l9YpovJ;5yoQYJ+hw9>!H{(^6+$(%!(HeR~&MP-UER zPR&hH$w*_)D3}#A2joDlamSP}n%Y3H@pNb1wE=G1TFH_~Lp-&?b+q%;2IF8njO(rq zQVx(bn#@hTaqZZ1V{T#&p)zL%!r8%|p|TJLgSztxmyQo|0P;eUU~a0y&4)u?eEeGZ z9M6iN2(zw9a(WoxvL%S*jx5!2$E`ACG}F|2_)UTkqb*jyXm{3{73tLMlU%IiPK(UR4}Uv87uZIacp(XTRUs?6D25qn)QV%Xe&LZ-4bUJM!ZXtnKhY#Ws)^axZkui_Z=7 zOlc@%Gj$nLul=cEH-leGY`0T)`IQzNUSo}amQtL)O>v* zNJH1}B2znb;t8tf4-S6iL2_WuMVr~! zwa+Are(1_>{zqfTcoYN)&#lg$AVibhUwnFA33`np7$V)-5~MQcS~aE|Ha>IxGu+iU z`5{4rdTNR`nUc;CL5tfPI63~BlehRcnJ!4ecxOkD-b&G%-JG+r+}RH~wwPQoxuR(I z-89hLhH@)Hs}fNDM1>DUEO%{C;roF6#Q7w~76179D?Y9}nIJFZhWtv`=QNbzNiUmk zDSV5#xXQtcn9 zM{aI;AO6EH6GJ4^Qk!^F?$-lTQe+9ENYIeS9}cAj>Ir`dLe`4~Dulck2#9{o}JJ8v+QRsAAp*}|A^ z1PxxbEKFxar-$a&mz95(E1mAEVp{l!eF9?^K43Ol`+3Xh5z`aC(r}oEBpJK~e>zRtQ4J3K*r1f79xFs>v z5yhl1PoYg~%s#*ga&W@K>*NW($n~au>D~{Rrf@Tg z^DN4&Bf0C`6J*kHg5nCZIsyU%2RaiZkklvEqTMo0tFeq7{pp8`8oAs7 z6~-A=MiytuV+rI2R*|N=%Y));j8>F)XBFn`Aua-)_GpV`#%pda&MxsalV15+%Oy#U zg!?Gu&m@yfCi8xHM>9*N8|p5TPNucv?3|1$aN$&X6&Ge#g}?H`)4ncN@1whNDHF7u z2vU*@9OcC-MZK}lJ-H5CC@og69P#Ielf`le^Om4BZ|}OK33~dC z9o-007j1SXiTo3P#6`YJ^T4tN;KHfgA=+Bc0h1?>NT@P?=}W;Z=U;!nqzTHQbbu37 zOawJK2$GYeHtTr7EIjL_BS8~lBKT^)+ba(OWBsQT=QR3Ka((u#*VvW=A35XWkJ#?R zpRksL`?_C~VJ9Vz?VlXr?cJgMlaJZX!yWW}pMZni(bBP>?f&c#+p2KwnKwy;D3V1{ zdcX-Pb`YfI=B5+oN?J5>?Ne>U!2oCNarQ&KW7D61$fu$`2FQEWo&*AF%68{fn%L<4 zOsDg%m|-bklj!%zjsYZr0y6BFY|dpfDvJ0R9Qkr&a*QG0F`u&Rh{8=gq(fuuAaWc8 zRmup;5F zR3altfgBJbCrF7LP7t+8-2#HL9pn&HMVoEnPLE@KqNA~~s+Ze0ilWm}ucD8EVHs;p z@@l_VDhtt@6q zmV7pb1RO&XaRT)NOe-&7x7C>07@CZLYyn0GZl-MhPBNddM0N}0jayB22swGh3C!m6~r;0uCdOJ6>+nYo*R9J7Pzo%#X_imc=P;u^O*#06g*l)^?9O^cwu z>?m{qW(CawISAnzIf^A@vr*J$(bj4fMWG!DVMK9umxeS;rF)rOmvZY8%sF7i3NLrQ zCMI5u5>e<&Y4tpb@?!%PGzlgm_c^Z7Y6cO6C?)qfuF)!vOkifE(aGmXko*nI3Yr5_ zB%dP>Y)esVRQrVbP5?CtAV%1ftbeAX zSO5O8m|H+>?Ag7NFznXY-Y8iI#>Xdz<)ojC6nCuqwTY9Hlxg=lc7i-4fdWA$x8y)$ z1cEAfv{E7mnX=ZTvo30>Vc{EJ_@UqAo91Co;@r;u7&viaAa=(LUNnDMq#?t$WP2mu zy5`rr8b||Z0+BS)Iiwj0lqg10xE8QkK#>Cp6zNdxLb-wi+CW5b7zH2+M4p3Cj%WpQ zvV+J2IY@kOFU_|NN}2O}n#&F1oX*)lDd-WJICcPhckHVB{_D}UMo!YA)`reITkCv& z+h-AyO1k3@ZEIrpHB)j~Z(*sF@TFpx2IVtytZ1!gf7rg2x94b*P|1@%EFX{|BMC&F zgHR4<48Z5Wte`o!m*m@iyK=>9%pqjT=xfgQua>)1| zzH!~jLG!rggat+qAIR%H=jrI#Ppid$J{TDkck^wb>Cbnli}}Mj8!tNfx{tXtDDVA6#7kU4k)m;JoI1>JM_ zq-flQ5dpn>kG~=9u{Kp+hETG^OCq!Y^l7JkwUJNUU7izHmd|F@nB0=X2`Ui?!twzb zGEx%cIl)h?ZV$NTnhB6KFgkkRg&@c7ldg>o!`sBcgi%9RE?paz`QmZ@sF(jo1bt^} zOO5xhg(FXLQ|z)6CE=`kWOCVJNJCs#Lx)8bDSWkN@122J_Z`gpPK4kwk4&%uxnuQ z^m`!#WD#Y$Wd7NSpiP4Y;lHtj;pJ#m@{GmdPp+;QnX&E&oUq!YlgQ%hIuM43b=cWO zKEo!Er{mwD8T1>Qs$i2XjF2i zo0yfpKQUwdThrD(TOIY_s`L@_<}B|w^!j*FThM0+#t0G?oR`l(S(2v&bXR}F6HLMU zhVvD4K!6s}uUD^L;|Sxgrb+kFs%8d8Ma>5A9p~uUO=yF*;%~xvAJiA`lls1pq5J%k z6&-yQ$_vP5`-Tr56ws&75Y&Q2;zD?CB_KpRHxzC9hKCR0889>jef)|@@$A?!QIu3r qa)363hF;Bq?>HxvTY6qhhx>m(`%O(!)s{N|0000xsEBz6iy~SX+W%nrKL2KH{`gFsDCOB6ZW0@Yj?g&st+$-t|2c4&NM7M5Tk(z5p1+IN@y}=N)4$Vmgo_?Y@Ck5u}3=}@K z);Ns<{X)3-we^O|gm)Oh1^>hg6g=|b7E-r?H6QeeKvv7{-kP9)eb76lZ>I5?WDjiX z7Qu}=I4t9`G435HO)Jpt^;4t zottB%?uUE#zt^RaO&$**I5GbJM-Nj&Z#XT#=iLsG7*JO@)I~kH1#tl@P}J@i#`XX! zEUc>l4^`@w2_Fsoa*|Guk5hF2XJq0TQ{QXsjnJ)~K{EG*sHQW(a<^vuQkM07vtNw= z{=^9J-YI<#TM>DTE6u^^Z5vsVZx{Lxr@$j8f2PsXr^)~M97)OdjJOe81=H#lTbl`!5}35~o;+uSbUHP+6L00V99ox@t5JT2~=-{-Zvti4(UkQKDs{%?4V4AV3L`G476;|CgCH%rI z;0kA=z$nkcwu1-wIX=yE5wwUO)D;dT0m~o7z(f`*<1B>zJhsG0hYGMgQ0h>ylQYP; zbY|ogjI;7_P6BwI^6ZstC}cL&6%I8~cYe1LP)2R}amKG>qavWEwL0HNzwt@3hu-i0 z>tX4$uXNRX_<>h#Q`kvWAs3Y+9)i~VyAb3%4t+;Ej~o)%J#d6}9XXtC10QpHH*X!(vYjmZ zlmm6A=sN)+Lnfb)wzL90u6B=liNgkPm2tWfvU)a0y=N2gqg_uRzguCqXO<0 zp@5n^hzkW&E&~|ZnlPAz)<%Cdh;IgaTGMjVcP{dLFnX>K+DJ zd?m)lN&&u@soMY!B-jeeZNHfQIu7I&9N?AgMkXKxIC+JQibV=}9;p)91_6sP0x=oO zd9T#KhN9M8uO4rCDa ze;J+@sfk?@C6ke`KmkokKLLvbpNHGP^1^^YoBV^rxnXe8nl%NfKS}ea`^9weO&eZ` zo3Nb?%LfcmGM4c%PpK;~v#XWF+!|RaTd$6126a6)WGQPmv0E@fm9;I@#QpU0rcGEJ zNS_DL26^sx!>ccJF}F){`A0VIvLan^$?MI%g|@ebIFlrG&W$4|8=~H%Xsb{gawm(u zEgD&|uQgc{a;4k6J|qjRZzat^hbRSXZwu7(c-+?ku6G1X0c*0%*CyUsXxlKf=%wfS z7A!7+`^?MrPvs?yo31D=ZCu!3UU`+dR^S>@R%-y+!b$RlnflhseNn10MV5M=0KfZ+ zl9DEH0jK5}{VOgmzKClJ7?+=AED&7I=*K$;ONIUM3nyT|P}|NXn@Qhn<7H$I*mKw1 axPAxe%7rDusX+w*00006jj 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⁣ zwiG+x#%j}{0gU~J8;<|!B1@-XaB@{KORFwrYg_8rOv({b0EO#DbeQRm;B6_9=mXGf z-x|VL{zd`)#@yN}HkCSJbjbNlE|zL3Wm9Q8HY`sV)}3%pgN>cL^67{Z;PPL(*wT8N zUjXU{@|*hvm}({wsAC=x0^ok0%UAz0;sogW{B!nDqk|JJ5x~4NfTDgP49^zeu`csl?5mY@JdQdISc zFs!E{^grmkLnUk9 zny~m)1vws@5BFI<-0Tuo2JWX(0v`W|t(wg;s--L47WTvTMz-8l#TL^=OJNRS2?_Qj z3AKT+gvbyBi#H*-tJ%tWD|>EV3wy|8qxfzS!5RW;Jpl5*zo&^UBU=fG#2}UvRyNkK zA06Dy9;K1ca@r2T>yThYgI!ont$(G{6q#2QT+00r_x0(b)gsE`lBB?2gr55gq^D3Fi&p%E(p9>U%bv zkg1Jco(RbyTX7FDHOnl7-O@ zI$AaIl?9NJKPm(WiBP`1-#CB1QzU>&hKm)fpa5DKE{2$X0hGz-0uZ?cyTk(YC!Y&| zL=1VrNERSA5NA2jq7FACfX4JfPyj5XXl1yv0>~s;eF7L2$>&oMqeTFT2m$y7FlkON z_yurD1yIOvA;5C6016pyxBznGUt0kJ&k5r#;&>Jow`r)sp9R~PmK~lz$3xH%LT*1U zJdOyABZ3!FvNoR*vN$5ykHS8f`jA4zV+|L}i1C4`B2c{R0;UdYxaU|H)2avz@ z=mEYc|2S<+(B2Tj+FkX+2D+yFI!k9lWMA61DJ{)e;lum$(;O87?vGJJe!KtK04+N_ zI*P~t@dUb>9Xh{dbyl{-ZQ(UMgz7$|QfL5XSPkskt^NgctYC#;4WcZB1@%@wy@2t3 z2z0DI7&%b$*Aw~abe?GxE`ez@+6hOh-6*8fHRV{1os$EL@}uUZeG4h1&Be`98q*7j z=3-v+lhIjfWVo12!<>%V^a6lTgW3+_#W6n|p*~==zOH7z$0{LSZk(Tpd7EaD04hnA zL;#fxS0aD{`5^&D`}>0Uq?byDD-l2=!wm_bLcUl4gc(% za1p|itVANvFF>hghAS07Im1;IK;|b*W)}VDyI;BIp2=K*yu2a)j?B|f<44NI$NbmJ z#dE0>jI$fMr&@>4kN8MLFb4&2O9fEKaQg%(QO$4_1rVQywG^CmBLh#}_7gKW3vd?| z2?1^&KWq8}8I^_S0|)MowU_pw$q@nl@Nkn$z>BQq_KA^9yaR`(R3u{{Ig;cwt z@AJ^{ODQCm^neroM9nKNUAXi9RCK`OsP_LuR0PUR(YZCCX5dNF6VzcoK&=b^r`W?ltt|*F zpkoae%ZT{C1h~EcFui~b7fF`vb<<~j_VquuUA$}QqIKYELPp#;{u?q8Dz}WAG-(3; zjrm$i%7UbyZMM(Y{>!uJ#vNB?R~B{6Htp=>e*<{fQQ5W7V(1coCWlOON!MzZxhum| ztZBQpGR z;~#ur^&PockKdV{Q6R>o`Pl{0x!DEbpZ7y9Y;*ZvE!*gU`V1W3znva{f=?WO5I&>B z&hw6}tjECtaghm5z|C#%M;Yf_*pI^};h}Vl=^r9EN=tVDj86D;C$jIJ?K7VP+00000NkvXXu0mjf D5i!M* diff --git a/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png deleted file mode 100644 index 459ca609d3ae0d3943ab44cdc27feef9256dc6d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7098 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 diff --git a/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 8ca12fe024be86e868d14e91120a6902f8e88ac6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6464 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 B0*L?s diff --git a/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png deleted file mode 100644 index 8e19b410a1b15ff180f3dacac19395fe3046cdec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10676 zcmV;lDNELgP)um}xpNhCM7m0FQ}4}N1loz9~lvx)@N$zJd<6*u{W9aHJztU)8d8y;?3WdPz&A7QJeFUv+{E$_OFb457DPov zKYK{O^DFs{ApSuA{FLNz6?vik@>8e5x#1eBfU?k4&SP;lt`%BTxnkw{sDSls^$yvr#7NA*&s?gZVd_>Rv*NEb*6Zkcn zTpQm5+>7kJN$=MTQ_~#;5b!%>j&UU=HX-HtFNaj*ZO3v3%R?+kD&@Hn5iL5pzkc<} z!}Vjz^MoN~xma>UAg`3?HmDQH_r$-+6~29-ynfB8BlXkvm55}{k7TadH<~V$bhW)OZXK@1)CrIKcRnSY`tG*oX}4YC&HgKz~^u7 zD?#%P?L~p~dt3#y(89y}P;ij|-Z#KC;98PvlJCjf6TQbsznsL8#78n~B_kaQl}nsm zLHr7z%-FAGd=-!e?C{q62x5i4g4hNuh)LeqTa4ynfC4h(k*e>okrBlLv;YG%yf8!6 zcN)a^5>rp^4L+myO70z(0m`D}$C(eqfV1GpzM+%$6s6$?xF>~%Gzx|$BUZ$=;f)B8 zoQUrc!zB4kT!wqSvJ=ywY-W)3364w!`U>J+49ZE`H~+{!gaM)zFV!?!H+)k8BnOj3 zGvU93auN}g?X^8c`+PFv|EH=R%m)iUN7gssWyTD~uv7prl1iRfRaCFeJUuA@$(p&K z?D+cmhxf`n9B~!?S#d*TeLb^(q~VYS$3KhjfwfMWtZx&PlTZ(i@5HJ?of_Q)0YX99 z35b?W>?=vlb6gtK1ydcF4<@aH|Hgj8r?~QNOPx(YoKT^Xn=?Q%=1uA&-G(}mXdtsT zQuKACS|@G@uBW(SY(cH%% zq+xr%bpGqOGHyw3=8K7;J&hp^g1UsyG zYT24BGeGQukP?&TlOBE2H$2oH>U#E>GtI-fmc)17uc`7FRxJ3A!c%ADN^Z^oi6tYp zjzE+a{r&jt6z^scbd(feWPVEE!lV1I4lfdLhQ|yLdx&1IEV%l1erB&H8X}3=8lIcc zCNPUis-KRbCC z20@WYl&vVEZo!fLXxXs?{|<|Z=>0^-iX;y6{DT$lSo8b|@FZM3U$+W37(A_9<)fnq zP~11?(AKlHI-Lh(`?-@S?(1{t16bc7ESX->9twFP@t8_XK$XxuSFF#R(g7H(U%XvWa zm}J>%4-suYL=gX7-_MsjD27o?I!G888fxV$koLCfOv+Da&OVTG*@(aC9lz_e>*UGS zrX6f-45hd55ya-p_O{FbHEG%Ee9~i(H-B3RZkv`0ZDn$!>MigMZX06&y3RSk-WnL-{cM1 z1TZr|rc*Xaf|_^y&YLc4KK3<@aWfge2jARbRRg1DfJ~%pV9L_@$UADw3EXC_n%p0v zQO*{=88K@W{T?$wCR#S!M!e+R$aDL~EzovN7pbOBvrk&&ASS=Z43No|jrc>}aXXO5 zrd1<|Qypq-h#J*iORN@8YRc&`17u=lqo&L&YV%p#hL%P*WfIfH%ZUC^o#`?IWWr?w zQ^?EgP7!lqlq}ZM}d*sSVz(mqeQrA_huV@M4iwXa>k+%O-ZHW44JrRxLJy zLoHTuEqw(sMcO38n*lQ6ve97<&+Y50NNmVpW{hed@5EgrWfI~ITFJ0D(<|k)ag-~cV z0@-#S9z8&EUfBL7C_53YJ$)2ix^)vhsH;Q&KDdwe{q{2oJ#~b@#Qr?YGHrh;`rz<> z)F&rNr}J@}p8^N(8hLRH`=jpeT@y z2v7WETpnG{qixxkWWyK7(3QJ)RF-$=`O^k3+oY;O;rNnl^kVc*(j(Jb_99(Dw1w;T z4K8fsKDzn|epoWT|5{~*3bCC1>nd5;@=5lApq%3>^U_gQD>5j-O@WH;uEG+4MSBjJkdgtP;JG2`S&&Sa#_w33(yyAux~lnp7>wMXzD4yy_2#Vh+7&WMkWFl9Ohq06ifTiMWIC(|1Fe(3n}U_0(+jGC_(1c@X4vzk6y`)qzH+WXtj>dhI3=)~1Oi0Omh z^vp^i61ge1rO8;F~ncj_=tk zIvnwqFB-?)jER5LdQ?Hi=Kv5dgPZx%XSjc8VLCd4yYK4E88pIi4AGWzwdmrFf6&AF zI-`N3cpnf!Klj%)afJEC-x{^po?kDKD0@>6(}1f2xkCOMS49E?+5^EenLUrqK%EANgiQdAy8BW0e}Fvw`>)CTcvBeX6ZgjWC~(KdFE9hv+M6*t z?loxF7N3yv+}r*v(>9DX;0V1TP3G)L5r}m~e)RO*pc zv#tyehrK*U7ilRPA zk!aAmm9v3`z|hH7+WJ41!*h~g<2G1sUubFoL9b?dbp>%)pHzUZ-n)Z)W(6jh>jY-3 zUq&n%9=y?`ajN7rr3`t68sL^H^MG_rUDQw2$gj4Jb8MXgAW99^EbKmu9*Pv4Rh3=;vUVF30sUrdj!_n0*+m?WCbo^8q2fo|;?vH3OFh4__< zyaqNQdP4&Q+6R)%gv|^b#b|oW*XMMKLhEgy7(3D!poW*Tk`Qn4f*HUBD@U4+eOL|4 zh+hT+hl`Hx6+v(dZi=hGf|lF9JV};bs&Bm{THmunMOu))>8UdnTYV%TFdKB!dzN+?+5S+WYI><_z_6eDC z+WvMv78tB-j%G_;_de;{^Q7!t>Khj7gp^izaCK?7PmUiHevBXbk=s8{114AjWHDj{ z_(0ZvDUl`5mu8_cWw}Ba6$W+4RbZ4H97I^qQrq9Yd$5A!1wSqDNaUXf_sQ%GF7*wX zXFhfrz!d7zZiDhtgk#HcP(aukNVacB**=V7u3*Xwp&aR_R8vnbd1PGG6$}j(F_VMA?KUK~Jd?J)TjC!h3~KL|i&IYtL40AFtv zb_DC5Vt8aT6JhF5fEI0_FM#^zCX2>a=A#}FVOKjnH_(#+q}Ggy0kU*_?=3Ifjr+H$ z0D{~ZO<8+Sll*k^U-Y6DvsCpBP|v8XH*H@U(US~mumH%)dBJRde1f|G&@1J+MvVi( zla}?vMV%}C?xRQOryKvG8`v3bs)mPaL*v7}=z1;z?uq)tAg6HwY9Ihbhu^awAJU&S zK#m{H4)PVmJ!}eqpy%MRP$Pe(&D;?N7($!Oz=8uTxRyl1Wg*V=gE z5PBge1q~I%qmY6Ol#1^O?u~P=44?CDh*GEXjSmoi`y;!_V+I2o>H!jms@u4HII9l^ z=&`W@f)v#1KQ8O!bY@+=fC3VBA@A7jQt^q~fz}*7i0(grY=jujW3=vAHS&qyN!B3* z;l=MjJrW~O7Sz5xp2Z?EtA`naLM239gw8Ub=%IHPY<00fb5 zozf%j+(s|urpUn~5r5pE7yi0taDcx4`#K81u*kwAk(cvQ$vx_F{wd}8h=eKDCE$M(iD9_QGJh zr0e(Z>QuRZ+`ff^GZPu%;bA#_^$&vsboSa6V!jmN0SV4dBKN4v`C)aESBtZV7J~U( zOc3e47Zx3Ux67y(o?#7;!=y1jxEueEF#$^c_PoxG_pq)GZLU2`d>%!3rdJjkrAK!2 z!2>jNPceo_9v)xpmu)_EgxsU9*GT^QoERVik+LSzH$Z{Ax7_GFY+!HA0MSfDyXT(k z?vob%yRiU**{7No8PKK&w77Z?8j#9IJ#hv1O^!lS%kt0n7@x79#}+R-TuINbiBfotv)O^y=kD0AkUNhrP$U_@qXE zYpkIR$Zgi=#6Os0^$m7rt1kV3&R~;r&xn%>8xzDHk!yob^vyrl^*R$4R_u5eYdHc> zk}^bkAIjLe{t{-Q8+D@9&dz9Q;o$+RGT7l8sx<~c5IBs*Dp_bAwqQRM2olfEe}Vk4 zc9Vt3hx$Z%0|;xNF=aW(Z*%CEmg_ z-riR#1Wjb9t+D^_K$%|E`_m#&XHzQ*&~vzFCzYIJB6Ieap%urgb=%UsC<9^hC4{(B z(3+*N>|JNdhT54KE$HT~okqq-teADE3Vn9^sA!>%+fb|98XIO zePvP!J8>9Ao~cC(u@>UqZhO(v+C!ob_m!fdtCwsACbR*lqtAwwQ@{hCy1%pm)*>|2 z*4U}vUNFO;Lw9~?Rw9)osm$D4f)?XmUvN$e8eWjjsm+Gr-@$~6iMgqWH+%YAV1gAu z7NbW)FU+RvtZ75ADtlW83vAW@YkP-BMr{8tV}A+L9?({@=u8(K9O&F z4CiS*&nHDa>J}36GR;VAs~I41Kfit308jVeg0#zIVj;(cr8EHqE6<OP0C9kbOl`)daY)$O<0J;;?A%Ve z&#H!_rNfB84*1o6aD2oLL(Ywd^#ZTmyK9Dlqg=at2TjDGCcH@qymjUqbf4FvGxc*ap|#6x@}Ug@+NK z6j_PV43T(wmxf+(J5kT~r++|VKw>6X0o1~R#{);Yll!>QeP1cfzTvOK0-Ndpf;nGz znqZirxrk&)Llzz-fKnnEL_I{Lt#O<8-0}IX?!m#sfdv{wY{3p7aF*=sI^w@wUdl;1 zOaQ`8mA(OjeI_2&*O_79989c3v-g+F!6OGyYBVD}5>W|JMvMsd5c6BV0+zUQBP_6V zpc@@&KR+A%>NFy5N0^}idafWHEjUnt=I<|KC5!NPqrW(T!j9Ll{*5Zxa^f&K*Ftjr zawS=CfJrKpWc85)DE8bbv=YBAz#5gkRLaSR_+g6q@-*6f>L^-JT`4CEtE*JX@Z1zF z0E&{AR0fE|??ogjZqfU3(3!I1@j9|~pd0<5UcI0vX5Z_hd1HMA@j|Yv)N2|G^GS;q zXYi@WB9s-#b)He4kH+MtvHHF`8K0kl-oxkemC0RJl}RX;os2R(GXc%6Dn>&D@rZ}- zPb!J(Btl-2B2W+9n6vkmpjV4Bl?F&viUK%NfXXmH_#u%8D2iDWAcFW0m@khVp9{N9 z7&DbP(1Gk7XhlD$GZqiugk2XTu>nJ*bAY;J1CcQR(gq#?Wq4+yGC*3wqY5A{@Bl2z z0I7yYB2tLJe5Lb|+h?DCkK5jdFd$~3g?0d0ShVgG6l4p2kXQKH?S=$M3{jLui1Y>! zz77*W+QP#K5C?de0OAUdGC-Q)A%ZOd%_kz}%W2+>L}>etfq`~pMyi$o5kJUY><4vq zdT;7z-}KnW2H$K&gE`X+Kok~5fVjY;1Q17f6amr&9##OQG7B#?nzXIwwheWiM!)a| zv^^L9r_m3B3^W^?E?~yI`Qf!(wU9Ow3)Pu3odJ?DRk8qag@-*r>fw?ty;X?M?5GeGW6VdRS@X}kbfC>Ph0tSHC!=o7> zcJP1%;)e#h-i!cg0S|z}2#|Ws1LjKvukP!X{cY{zF$mh+!rtD7tND^MV;y)-ur`c4 zFKkU>&&+tOw*1y*YwVu5X8==z0UVItNs(wyMIoAiwTI+0%@V;VuNP&ZIh92y2&-(k zMi0;exUrZe67@)CmgjR)(0ttRFy~A9c}gUif~+K|%mVQAO^-$M_Lq|w4!my^J_<}z zA?b<|Lu5*2A)0rv67|lAMLqF*s7KWjivr(f4{^A5$f4qjg zmxyepp;Y!W2-Y|f2|IZNMV_rib8+3xIZ#3BP@Ul4G|a88M6V}A)%k~vnh0%eYirwy zYwt@rDs5q5-M(vANBrvba>DMCi52-;ZT+q5*4X2*N*nu4*&?uY&0IEM1_>fN{*6zdU!wDfFIgPxZWn<9+^rhhu0i5u{>8eHa7)5yJ`s} z&wJ6fw${~r$vM*&uCCxryLOp0cDzs0u6k{{^!ivQ8f-O~8dg3KgU_SbRiA)C08Qiv zzKj+=kD{M5JWJLGV(;@P`ZkfJkBl^sz+u>GVaJz7K;+rg z!o@{r=UEY;R%DelCy0#G3URLBevOL)`* zqy;>(0F74#5KDMKCSwZ$ri&3ES$H7!lg1Z%!6v&4XYGNurEM%p9@7gz5@*`VqGLzU zLT+15_Xc^?TikPBx22wj=^SZ zs}Z0G&hW4Wh|SoR5uCl&CJhu&k`der5ui5sCU4Xu6TeIXd)x3=z%U;RBc ztv*7s+cIP7jSY}0h}ev6NdZcX;0%u}Krp$FD?Ca7=>U&BKrt%d;n#!acKLYTY21bZ zv@JUu!uL_#BXe+Yf|!Brh+$)}DSJRnnTjC}Ljoio_TWn)VmmNO0IF00kQSrrFee?R z7Bc~)&8WJ1fTFY-RVM%)WCnDP(H}A& zhBl&Y)kS8&w1q_z9gU_85|G-ofg9`TvUE|dcg!}aDQgOV5Q)DNUCuQ)WYLDoh0la$WgJ4Rotv zl73SGB!!5ft4;u_0)Tewlu1aIlv4$e7NhEr2*wDImhcdODhmiee(7;S&)u7m^TJuj zaGUfdZDVciLfWbcO&60EYDq)jov~-{4mK7`pYEYc&w@icvLv$}mP~63fQaCyo2Ss* zQVo!HDH$pO(lRB35g-omfawMe^nP_^y$^poa`|Z9SFjm3X%lhVbe0*eXklR@hpazj z*S1q9FNjjxxVQ}d->$7c!mNdD=TFtot*O#!`|xS|OHuf_lO(fI+uy#9pUO$a*#sOA z$Rylwv>Hv8d{!)xY^h8tQ6spaLFVi$MVo35lV#;3pFwgMqm(I19?9JSfizUeB!pxz zcn=V0Ex3&Ey6Qwt{o0znXyk^^eztLT9tLee+r-Wk{2opI5JWWXJ32UktqpML9XRs6 z#MobUojQtE)E=tWWgF@baOJ{w)?sH(aQZ!{b=ZagG!MYD6E_&Z4eyD-|6~MGQ5j`# z30VOQ`vMH%@f}La~!CD6da+o0vbz|)znwna{EC?cc;6-Qy+!o+g*weOYZHn;7XD^B!GzUq~%s$X>)e$w?x< z)Z{%y9JjKLLjf7F$S-*}(L4YTB*B9jlapkLL@J3tktnH*$W0;n%wWo3O+r{wMM+Xs z312FZ01r9LkcJA*uaczmNv}$!;O~IX;}g9Njo7gI5`{<7<8q*FVrk0oC=PXy=|H#u zKz|QgXXl|oYge50=7$rDoC!A zwmuJZ)k$wFA`CfyIQN20w{F8JJU+C?)xnrU75an-ynV+u_V&K`HPF)1vY*SRA5?qo z4wJ-*MB1#|r!Rm&z+V6}B?l0Pe4bzc2%Dl|*~vO(62cT4m?6OkkScgmqa{JY29NC< zP`3p$kKj5U0CjC6u5(A)29~DgG_&oQS$!%!~kOnUbLrAa(Fytpgg!eRC*soc&G_uG_vu^N8!(Nuj&` z#K5BpB1am;3cv;J?KETBHutTeLYRx~!*UT%eFH@HlYnR~Xd#ZtV2l89$md}MNCP~) z#NEhk{c@q>)Yl@QPDyT$xQ-p4baOh=17y<6kArSxF%WmxdX1ad1CA`8-MhaZCnN0!T$BAvIYd$Ypk2y6B4Si@|dVJW!`?+j>!lxq~SM z3ias|wWr-lH!C{=QINH>!!YMh<{ktaPS&W&jIB2|K;l(L3bab7U{MCX3JClZr|>x|SL)ShO73*>(Um3?TLG`qsoXZfidM1G@Xto|+)Gp=VaS;Q^9D6v=9A zD>#=4Ano&cVAicz1Lcqje*g}Ec0HrKfAs*ZXNAq1<|_lpmo==DKZL81tN)a z-G$7_Zqvrk!pe$hqqYtX!@JFyp6HMtm!DR zlY%zt)46}pc&GU@O5HcDdK3`1gJ_^hRfR&SkCYK(7=R>uMx>}8RhI`yOL*WM)W?DK zd0>f^Fa5DbD2!_Kr?c<^^IC=K{kB<@x5 zk$1vQb~leE3UKtFT;Jvph*;*-lWW8bLCF!qLW$cXy+TXr@ad&Qi)bp0anoS zpc={A)@G=~8PB3aVN#6)WyEEr;5gAbX#X_(I$X6; zYpSX{&_t+i#6PmJ^0%_Jm6*0ZSo(JyIABWG_ol_VE?acLZPV(9(0h|=CK;f}D(n=h zH}=5R*n3cbAWn;2{Pym{R zy1w&fY{!B9--3Im@f>2Rti&3}gO=5fmc5Nk_uLGR9zYUnB;q6423g?ViKSTj!bo(N z;35C#KI82u-qJ4{Gf19eyVUlUW%|^ zZnCIfP7;y+_-`g5|IbPi^%ca4`U?_-{WBAUA;nq3Pmb&tjVjJW{j(BKKdjOErbeS) zu{%)Dotu!~`sIJ|mMlEx{_fPMF3&yt4!*}{=)Lxad&l5N;yDtHBLSza865qC)RtDR zEzNTQ$I=Twxjl$hva*tBC1{|2c0A9QyeEzMpx1&~aRXK^t{J*{-KFPtZ@v9|LL_>( zFq5pc7*d#lFa&5!Sq>Ugk%wTXYPEvD6H=0eMi-=`m$Q@5wh937R(}&TIUbMRpz@FH=p^muMS&k8rPW&v5Uw3|(oN%o@i?AX(9{eMj0e z=|;zbye%X!HEJd)P*|Sr9279#aqQ@Y0n?{$9=Lcxs@J0TE4-I}RLfhl^rG*&<(K_F zUwy@Y^V+`y!q?sCv2DYDAOYd)Z}@Ln_qX4s&#w5cTltGm=(3C6OBdC;FPKx|J8x!c z@AsyKx#Dxexm&kxJ(ymrFTJ)z(*WQ-$UTbhwHv+nPP8mmW^jxPQY+dck!Yn(GBCl| zkS7UDcIeQPG+ujYNI(&)epEv|1C8I--hO0z57$xcyu3ne{CQ(R;BWX0{zm~B2aNYrwV0HSx8{J;1$)?@1OKiJ7vbWif-(1RyDDC0Urd(C)7@ec}NqAJW4iP}%mf zbm-iNbeE}?u#}fR3L^cV^!xa?mYqBIAtni6fpfz(#K5@GYdg|=k%dN4+nB*IQJC7% zz*}ePoH|fP)rD#VciPxq#I!);i-%JJsPv!`K;iJCfOym2c+zupr{{E{*RZ44w4wK4 zhUN){sTFNBOX{3j)0j#J>OV=q>OxJ619fN}DGajWNdM=ZG3C0HJC*5|F-luRx+T-!eR#IDS=86u9ga*$qLhV6wmY2 a9sdtN6eHRrdyqB&0000AvglfA9NypXa{#=A1b*&&-_9nK?6&dOB)k#LUD105bLa$_BV6=HEq#kGmWEawY(P zYgJuY!N_}RGo8TO$oTXsB$&89>#C*cCdYLmNX~ke#Hv9KA93kET{$`$PbI2&f<=QO zbYEuG&fq#8;U|Hp%+iMX($XltD84sh%`HcA9=yrw*x5Rd?dw|aj_wW|b=kga#C;uk zY)LO?99@%_7kX6dzR(&*!tnq4;>`zco!?9(Az&zTo|L_j^WL&gF7wJuI**)H&y&sO z9l;NhRvPV@eM$C25(Y1oLfTY%Qu06J{1!LY%l6`?e{u8in|(1@!4MJk2$1+uIsPqnf+k()k8h#rg7tMJHVtWaqYT zq|_R>T}xsUyk)<9e2b1o1pB702Pc9ve?7kQpF2}x}2=dBPVaUdm7-ZjF+bUL0vak))KQnKW)qx!vgbJE?)QXqi+7Po!iYjGEI9xeX+3}trhX=ZOA z6m<4$ajUa5?TbuamQOsfYFx!_%v5Pca-z3$eHCN9QVeZN0(`DY*CwYcn=Z{IwS{|W zMVA?tHKL`t<(1kV)n+5idi^{`iXLpvnO=;Rx{T4}wriDGR@79T*3GDl#qU(VPNH?_ z+WNh=8;jQwV zM#imv9eB3r+LQaLX%UgUmS$Q-V|+Ygp>ovUbJ{jiX~_q+go2a38CD$M(o|A(oS*f( zh?L!-@KukR?4c%)OIZBg${L2g5L6Pa=XF(yBP@&9b|agsWh)uYDy{MN@*W9zbE^QG zPZ8wOAg?zDskn|*wf&j@!i7Pbw6fw_Jr}n|+l>O-_8a2*TEQA7y+XU@NUD_gnXUKG z2}$1=_w*$M6~;^rw4#*yT22U!%e#`&t(A(xyf|-T(y3T1sVLvn_}AGKzdo!w)-*Uq z)`#%}qna5)jZjh2p>&4DK;ogEbdo#F?UZ%H>ljUbLLNV;50EQ$-zmX5OZ~Oiu>6ZIQR6g&! zPTyC(E=$qrR?zuYogtRne89+%HynZlT2P=QPE)k~RavpYct9<_leX;S(cUYWmJ%5i zw<#|0L;Epc1diZ!djsOtxXCrexN0iPy+W$%xrf_3!-ktsYsF?BfO_-+rz;1%p|X0Z z`xS4h<)pP{yf5Y2%`K?M%L1lRyQRhGg2R@R1BO$0TUeSMPUR$cJ)j;QyWQ-2SYJ1? z%~^ILTzh8y5rPT)29-&Qo@%PiVei|f)aGz{7xO>5>77{OmMi}>lo?rwpOta_aN2a} zZ_L3$CVhl%C4|)F%yc_!V?s)E@;~94fP)o1CTwgW@3F@BcS<{+x8_h1m|gj-8eT8~ z{P{;v_nE3QwfJ#=Vz7jq`qgMV1n|+2J0HNKgTY17#cGz07^gpi;87-UU+o*XC;A3g zg??@@etFPbu_%d$CSm+feh%;vd6_sgJ6ydmIB8OZ2ObCNBuk-&Tg}J-dX|>uJe}kmEmBH)Q7uAac~6f=i$joy zJK0c6OM9t_Ef1k*Ry3>%RVQV4P_zwS5s^T+u`MbCH zd6?wSSFRIE`|C9((s}H4ZYxc^RT{P)UbYCc^d0IW&aSPITSpqAIQF6g6&D^@VVnrOzTa^&s3buD4Zh79z^>7JLQH+- zqYS8QcLF8+03Y|4eD30R)L9O+_7gvyxH&uXehWGsGF8ox(YPKFj0 zeO}1^(}~=Cb++)WmDI6QeKp!MtupG%f{wZCy1$n!&RIBjUrS~HF0dp*p%w3uW|XYcuU?@&lSpJS-nf;@|F$`Umi_6zQo)P* zAN?|yXKv+GF@wL}{Z@+e2fPCrPyKWP%8JnsD4{x0N4};B4)_O}kwrPV3fK?Wi2^1> z9|==dt|saLUjuoB-9|amKlwXh1UO#${B=k&OyF9&!@HCh^(P1Z!t`T$%9BxBE^)o# zrb+Lsi5i*!ebE*rcxuhl)knhZ#ON)wO$oi@$3X1Yo6{S=udP&GmK4bkq;tb{^J~U4q82PKlFy7~0oQfA>1ZE&nMwI&x>vEc6U6l>WUM9Dh&x=`RU*Gbxx! zkNtRQF;b=RUB91-eD(xJv`D~Lmt+aUbpk*|itL0+z!SP00+|E6y z`uA#y)}Obo8;y%<&n3om?p6xzZJ%th-0j>wzfmi#6_%M|?B;=zSIm6DyAoM_apC>I zXM6D8M09ojEP0;(Tm6=+iv(2Opx(Oj#^^AOYqkBr2bn&rSZqFl_g%UyrartZl7oXX z-sf{fs&@{EPIHwb9qDY_<^%-#3soQ%QDuSy?jsU+(Fip2|+_ zGrN|zd*<~MKX{Lbhj???lU_IhSOdz4)6#L*Ah zm&9^`M`a&%BRsm}7gG3v#DiB;WAYz|2o$)P`>;wKw>@5~1xl# znaLk1Gsg9W+FM2frk6^A_#Vca3W3`Oq!4wV08%sw2(tG4QPdzk%6LE|<#%m44u|qJ zyU?M#nQ?*VpSqw3iYXL4`rl88NPi0HtH8TIb5i9co;}~0@H+On_0OFWps8>3b*XNL zROE5^A`ad4h3;CKVSt1Kz|T<$S=!5XFZ%6Vi5u+l>6fg(<F3On}Towx%MlobtMeV$xN86aA@wyIsb zpySR3MZYr<`22Zdh0P(}B+{cDNL&Y~SPHU}if;!Las3k+eLw;apzg$Cn=31tX!;`8 zY=|5HvpA^g-d!i?nHGr%`~;Flh)u-a91db%jAcig`GW_KWahiTTh z{}^LvD}yhSsCAb|MoLE2G})=@*?##ViZEif4M<3V`i@tM!^>(*Rgr=M9E%|@2gR-B zJV|}j_)t9!JI+t<`3J6z`iNgqpaz#UNv`wl%dOPql&jUOM&>{9=QR^_l&7V4>`hsJ z^G|jS@;l#xw>et_W*DeS$UNv7$Yq?LHspOA%H3LWvgs9kgq*9fx_t)_w4AYf&erE; zoUk${(?)h)eonZuyEw`pl=f#;ELYvr!4*#ks>oM})C*(SuXf}-zfb9s0fYSo3g&C* zV=nfhl#iZHZ8A?c#4g7pM_Rrg?|bjeon~Ou(U2Voz^zl1+IZQ!G&%DZFh62aK+ek- zIo}{Z&X;+Mut%Mj>T@fUL(+){SDfT6!du|ddt5){zl^BJmNK30o-LWDrxIFSRRt+6 z!mYbqyWs;|mm8gb++|aKrJtx9R=#Vi=s69%I$3gH4DJ(vBFLcl7y^(vnPL2npvJ^j?o{T3??tCz0EKI&uu8tndn zkP*E{3i=Q?WeHe^H6*-O16$ApV$=)$Nqz3J%o|%deE091F8ElmB!tV*#0J2#d^I^`4ktA5yK?Q)z|RG`a?V z6vH1jHr#*xxAsihWpi)FEq@|s`QcppDIGpfxROKBu0<7Fy{apE5|3#IrOxK5OZfiT zjAMJ0KGV~$kv@fkjt4!>L}(9#^U%fwjj7Soc36XR)nDkQ3%8O)y;4K2VSi!6N4Mh@ zw62zp(^}TOjuhC^j`!miC0|X$=v@bbB+t5$f4<4>B;>4L-dJnDu>0!J6a6@}jJN&h z5e^#-V!s9Wub&ovQDiBRQH|Uc+sDm4EBsD^hoLp{bH0m|`La@aQ;Ug8XOExRXK|8f z^?z9pD!y^tS<2~MSIn4a7XMfypgzG#m*nQ%dM@^@iK_bUx$*elFco$VW}e6F=)=J* z3o<(tO11GJCk*0owwI(!QK`Ukf9T;Pd{7*GdM=q|Klu8W#Ibn*K754KV1q`FWw!Tu zep>9~)rzk~X|!cCM0wh46KQ1GO>+TU8SrsBIj*FPcmY7D$cXZ;q6s*Vh)z%o(t;vn zx!K|qj$8j0+q9$yyXv#dz}`dy+B*;=H54B~0IEX%s9R#o6}K@lXi@`Zn-ymH++KpSwT zEpq>t59b$ORT?+07%Qzh8*}&0C2m>=7z55P?UqIjx=Nd z5_RT#G>kXWDMf$`cv#^@V6=CmHr$UfeA!pUv;qQtHbiC6i2y8QN z_e#fn4t6ytGgXu;d7vVGdnkco*$$)h)0U9bYF(y!vQMeBp4HNebA$vCuS3f%VZdk< zA0N@-iIRCci*VNggbxTXO(${yjlZp>R|r93&dmU$WQz=7>t!z_gTUtPbjoj2-X{Rs zrTA$5Jtrt~@cao#5|vM$p+l3M_HC0Ykiw9@7935K_wf*-^|GKh$%+opV7&;?rh9&P zh@9}XUqp-`JNnPs3e9~OrZBIJ1eel)hsimyfZSIAKa-_e!~q3^y@G=z;FN<65|y#S zIBWtzFv3n-*Aa|5F3Z9=zMs!RG6&8j!J;3)knD|vHy=yM(L#G}?m=jXNQ08rzG{Q? z03L8v^?3q`cxQdd42Z9RVo{e%Ga$C`=^7nqlxSf^lZhCTfwJB*!vD&M6QLv2g3NcE zlLNNSl;_UR5*{d}Kf!uIIF!i1cJDS7fMI##KSPmi=TR$DWZKb=cLBWJrF7#XGuhG7 zjcL@fyIHYDII3IRrCBTavFc^BM=uYdvN&GWBrcfogytsZ#mNX@9K+}pNp_= zk9AV-B>m?U~{NIbky_m^|J@%P=#HgBe^ zDfz`6g|`gOJpKE@q~4TH!vrHVNVb%n^e@&ALm85qj|xaBT5I90Ycp`;(u*rwGoyp? zo42?p->1XHi@SD&m=D5+6}|bUFWFw^Ue~(Ns1WQdWg=ux{zyH+AM91|XPZ%d*fiP0agmU%;tlV*!A{7y5(|3pSIw`dLqLknHv_PQBq$*|@+K4(r z(nO>@f;?%pkIO4xr70*Nk#eL*y7x+_=)8hsToX389#3w1KYRW> z*jT10YzQG%=Q$~Vd?jE*NFJ3Q_1xC`bl#coS5x4+(w)Pk{J+G z!)n>NlV4dtbN2@K)QdPtA{jC87jPU@hGv_JS3`DM&#QrL5o|v9pZ!u|C7l8Y!06X} zo>&23nPdehmmoN^p|A!0tiUTr`CHa7lrfP~sQnxYB!UG1e(yGzf9ed??k|R+753Jl z7|p%-Z;}uZWB`691Y{;z%fht0EQ5I=Q=xM!$55sB}?14LLaJP!Sh9=o6Ct`HH&OJAVuCgBpm0G_>L zLgPblVMON9`^+|EfPcuK*NO!3l?TlBFPGtQ7{6XmmBfL}Lk{{Mr*gyq842232l)y! z&EGfE9#VdjQO(a$U8DtYD6#;quA5M_q9pjqqG3-3XgR=iH5haYfFOE#7*m*WlW+;p z?*(QB<`&=?VN8b*zDdAXk|0u&ChUKnuK~u}^00YLP@tffpKM40h@>0qAv>J$ zJrJO6LoW6nQ;Lt_8TqG$3|&uIySi8pIQWB_=t1;Ew5BRl7J?W_#P#Q!jsiS1)t)R& zBm=TT1+G!Pc}xbIpGmNXV5B}zM2aE|pbfY#^zg<53DRF@)}T12BMzF0(fIJ0A+3Z) zF(FCSsFO`ljPqMasO-{OJsw6GD$89qiidf9!om$onI10;i?xPp_7Zxa02^=nHJfV2 zo}1Yu%99UK)~|dQR05$flJ_LP@??KD=@6^q3rd&zl=sq`D155z=wL0%C|=Gl`rS`{ zw-3XN{PCKN>`Mx4Uux^yLNOaIrkrs#Bqr1f%w1cG$Fdo;T7H<^$r|;|#mdi$cevZ* zdUc9(`eHt8@K+4=->Qr*HrT(({2Uj)Bl+GPr7ru{us3&!JKUzXmE_(`3UuU4d?;JL zc1X3KSL^U^==r@m)sd2}-$!fwYMO+)%E6|CLIK_ z##nHbe&&rMSDpx}2%+?FJ^shJ8yjE97(vftaucYh>*)KEqRD9|NrLKH=hV$e9A!~^ z4bADay5RL!GXeJ2_zHiwLYIYD#U!gVUX?0lWn6r52N(6LN{Xi9iK=_HO>X!U%Sq@l zh^!p)kHb1d(Ot9To5AfPe}~eD)OZ0MoXW((BIk$hb?gir611I2@D$KJ^VOg zT4fSfiCU#LYYL*CDCFNS4@bFDJa-HD&yA+x-IPQdMe7%+($&f?mC=n) z%&EO|+G#XLeHlo%(5I?7ol`ugo-_s0FL0#nkfTIT>6E9z50T3{?rk#sL>rRnNM~|9 zbq!>`l)R){K{#)v-}J)R27GTgA_f4XfzXn2${0y<*>7Svs39Rgf5ulzf}LmgT3Eqn z8G!%JRL1Gwj7k#Zh=Le=U`Dd4zH#;|o}L#6L-c(Lz=^Dm0-V6?8-?W5q)|w-V8|R@XK0f;$q`9@OmGmQp4JO_0Zgzau^3zjqT)q;CKx|;eNzuf>j1twm zQVhYEF@QgguW{CYFS%U=FfSW|H*CE2A+vuEH66-Q#2iU|Hp8DbO&^njfDi(!U@PIK z7gKGe-eQ+t4rUUtOnfvN87~ND%ab5b!x8Kexv=DeQHV%lmmMLXSRR33V1Aty75xeT&9+VL0)Pz zHpe~F;-a3{`62`|2n#wq#ktiRT;Lh?1diJGf-G(W%QRhQ=!Jr8$ZYk3OReu(4&Gvg zpl?-6>j!|kPL7>&DkSoxD|)&8W{jZ2fm<;ybWp=h-n|lrVTDs2KpsZq8Q@_M%r>_G z6KCrGAXxq8UNzXk`cExGjmaZsNdrw!&Z+iI)D|i}mo;laGQ-M%`}Lv&JJzx${Fd2` zs~^QJGpsDcGk=sm8SeA2z~=GbR9j%8fE@kpnk59Gk8>W2JHBvC&t8y~%f9?sa~*MT zzP9Q8+4`#QlH>2jX$MYd!H45&7r$Jq^`E!@tm|Bu+=?c(yux?!x_X7iET(66!RFDJ zzB?@ffQNcw6D-yOq*Rav4dB9dVs+0RBr5E*p3whI*rE4%-H25JcTOP^)Sh)#sZzJ+ z$IbOD+T^K=`N6CDCpfKHwv%aj}rTaikoks1a4O*+M}j{W)R#K&nzKm zPg7psVmbDEy1VO-r#xCjVwX&}+zKNECBJ!QguJUSSN_kOkv4T&}pz(^z6}X zGCV=1#|a(xlOI`HtWV8dgfuF4s$*LghD`Amxfcq5mblTfRr+m0tzen&#b|xUxLu~H zK~RBt!`&v4%R?`#kjuBJ$opo+D?{Uaa{a2hC;Ka(&ON7#V0K>#_J%#LVtBRt)u}`s z=j4Xe0jY2@p+RHv*#26?%g93kteo0Q@0;`x2ZCw zUn4`&W-e{5P}Q($ccv`W$#ILg_$6+&?B*0cJk#%;d`QzBB`qy)(UxZZ&Ov}Yokd3N zj~ERapEhGwAMEX1`=zw)*qz1io2i_F)DBjWB|*PHvd4MRPX+%d*|}3CF{@tXNmMe6 zAljfg2r$`|z9qsViLaWuOHk$mb2UHh%?~=#HPf2CPQh;AUrYWW~ zvTV9=)lS#UB-`B5)Kb!Ylg0RA){o3e`19Jl&hb@~zS>>vrFR-^youk^@6>0S` zToim7wzkY|Yt*;aGUy!o{yxd8=*L;orYQC!H#=|pjn&hO>o9B$tJu8TBHmxPPsm-) zM#T(;Z9_uvy1xq;yeeWQV6|}+=O;1%) zGZyIq}2>crU3z2ri)(ut%F~+%S>FR4^Xw()Y-+~&Xp*Ns z$?%1aydpzNIz2aN98}oth>3boYSifQ)J81Of>6k)!`WQWrB;xxXccBzrWe5V*>oMh zon)MEw$@-*!>L`CK}u@x^9-4gfvepI0b8q5QYVXr96{4Q#s2ZelHXxHv~G{GymRer zqyj7m)3yn3z5i4koiIJ!-u=p6QeL|BN+pWd>}TOFOVi01q839$NZ&I_quqb(n~9Wk id-{KKnnu*>l46e`&P3zgUlQEeAE2(Hqg<+p4E|raIYd(c diff --git a/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png deleted file mode 100644 index 4c19a13c239cb67b8a2134ddd5f325db1d2d5bee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15523 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 BIP(Ai diff --git a/example/android/app/src/main/res/values/strings.xml b/example/android/app/src/main/res/values/strings.xml deleted file mode 100644 index c518fb81..00000000 --- a/example/android/app/src/main/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - PrismaExample - diff --git a/example/android/app/src/main/res/values/styles.xml b/example/android/app/src/main/res/values/styles.xml deleted file mode 100644 index 7ba83a2a..00000000 --- a/example/android/app/src/main/res/values/styles.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - diff --git a/example/android/app/src/main/res/xml/network_security_config.xml b/example/android/app/src/main/res/xml/network_security_config.xml deleted file mode 100644 index c7755e76..00000000 --- a/example/android/app/src/main/res/xml/network_security_config.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - 10.0.2.2 - localhost - - \ No newline at end of file diff --git a/example/android/build.gradle b/example/android/build.gradle deleted file mode 100644 index fb94af9f..00000000 --- a/example/android/build.gradle +++ /dev/null @@ -1,30 +0,0 @@ -buildscript { - ext { - buildToolsVersion = "34.0.0" - minSdkVersion = 21 - compileSdkVersion = 34 - targetSdkVersion = 34 - ndkVersion = "25.1.8937393" - kotlinVersion = "1.8.0" - } - repositories { - google() - mavenCentral() - - } - dependencies { - classpath("com.android.tools.build:gradle") - classpath("com.facebook.react:react-native-gradle-plugin") - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") - } -} - -allprojects { - repositories { - maven { - url "$rootDir/../node_modules/detox/Detox-android" - } - } -} - -apply plugin: "com.facebook.react.rootproject" diff --git a/example/android/gradle.properties b/example/android/gradle.properties deleted file mode 100644 index a46a5b90..00000000 --- a/example/android/gradle.properties +++ /dev/null @@ -1,41 +0,0 @@ -# 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 - -# 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 diff --git a/example/android/gradle/wrapper/gradle-wrapper.jar b/example/android/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 7f93135c49b765f8051ef9d0a6055ff8e46073d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63721 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鯊%1Et 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⁢ zv5o9#E7!G0XmdzfsS{efPNi`1b44~SZ4Z8fuX!I}#8g+(wxzQwUT#Xb2(tbY1+EUhGKoT@KEU9Ktl>_0 z%bjDJg;#*gtJZv!-Zs`?^}v5eKmnbjqlvnSzE@_SP|LG_PJ6CYU+6zY6>92%E+ z=j@TZf-iW4(%U{lnYxQA;7Q!b;^brF8n0D>)`q5>|WDDXLrqYU_tKN2>=#@~OE7grMnNh?UOz-O~6 z6%rHy{#h9K0AT+lDC7q4{hw^|q6*Ry;;L%Q@)Ga}$60_q%D)rv(CtS$CQbpq9|y1e zRSrN4;$Jyl{m5bZw`$8TGvb}(LpY{-cQ)fcyJv7l3S52TLXVDsphtv&aPuDk1OzCA z4A^QtC(!11`IsNx_HnSy?>EKpHJWT^wmS~hc^p^zIIh@9f6U@I2 zC=Mve{j2^)mS#U$e{@Q?SO6%LDsXz@SY+=cK_QMmXBIU)j!$ajc-zLx3V60EXJ!qC zi<%2x8Q24YN+&8U@CIlN zrZkcT9yh%LrlGS9`G)KdP(@9Eo-AQz@8GEFWcb7U=a0H^ZVbLmz{+&M7W(nXJ4sN8 zJLR7eeK(K8`2-}j(T7JsO`L!+CvbueT%izanm-^A1Dn{`1Nw`9P?cq;7no+XfC`K(GO9?O^5zNIt4M+M8LM0=7Gz8UA@Z0N+lg+cX)NfazRu z5D)~HA^(u%w^cz+@2@_#S|u>GpB+j4KzQ^&Wcl9f z&hG#bCA(Yk0D&t&aJE^xME^&E-&xGHhXn%}psEIj641H+Nl-}boj;)Zt*t(4wZ5DN z@GXF$bL=&pBq-#vkTkh>7hl%K5|3 z{`Vn9b$iR-SoGENp}bn4;fR3>9sA%X2@1L3aE9yTra;Wb#_`xWwLSLdfu+PAu+o3| zGVnpzPr=ch{uuoHjtw7+_!L_2;knQ!DuDl0R`|%jr+}jFzXtrHIKc323?JO{l&;VF z*L1+}JU7%QJOg|5|Tc|D8fN zJORAg=_vsy{ak|o);@)Yh8Lkcg@$FG3k@ep36BRa^>~UmnRPziS>Z=`Jb2x*Q#`%A zU*i3&Vg?TluO@X0O;r2Jl6LKLUOVhSqg1*qOt^|8*c7 zo(298@+r$k_wQNGHv{|$tW(T8L+4_`FQ{kEW5Jgg{yf7ey4ss_(SNKfz(N9lx&a;< je(UuV8hP?p&}TPdm1I$XmG#(RzlD&B2izSj9sl%y5~4qc diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index d11cdd90..00000000 --- a/example/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,7 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip -networkTimeout=10000 -validateDistributionUrl=true -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/example/android/gradlew b/example/android/gradlew deleted file mode 100755 index 0adc8e1a..00000000 --- a/example/android/gradlew +++ /dev/null @@ -1,249 +0,0 @@ -#!/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/HEAD/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 - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit - -# 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 - if ! command -v java >/dev/null 2>&1 - then - 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 -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 - 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 - - -# 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"' - -# 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/example/android/gradlew.bat b/example/android/gradlew.bat deleted file mode 100644 index 93e3f59f..00000000 --- a/example/android/gradlew.bat +++ /dev/null @@ -1,92 +0,0 @@ -@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=. -@rem This is normally unused -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/example/android/settings.gradle b/example/android/settings.gradle deleted file mode 100644 index f2bca566..00000000 --- a/example/android/settings.gradle +++ /dev/null @@ -1,4 +0,0 @@ -rootProject.name = 'PrismaExample' -apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) -include ':app' -includeBuild('../node_modules/@react-native/gradle-plugin') diff --git a/example/app.json b/example/app.json deleted file mode 100644 index 6b936fd7..00000000 --- a/example/app.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "PrismaExample", - "displayName": "PrismaExample" -} diff --git a/example/babel.config.js b/example/babel.config.js deleted file mode 100644 index d3622460..00000000 --- a/example/babel.config.js +++ /dev/null @@ -1,19 +0,0 @@ -/* eslint-env node */ -const path = require('path'); - -const pak = require('../package.json'); - -module.exports = { - presets: ['module:@react-native/babel-preset', 'nativewind/babel'], - plugins: [ - [ - 'module-resolver', - { - extensions: ['.tsx', '.ts', '.js', '.json'], - alias: { - [pak.name]: path.join(__dirname, '..', pak.source), - }, - }, - ], - ], -}; diff --git a/example/dev.db b/example/dev.db deleted file mode 100644 index a36fd182b074a0909e640bbc9d91caed24c076de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53248 zcmeI*O>Y~=83%CE5=EP~#N=QQjcatVmx{0%%B7xHG#m z&-~`u;VvoLXCEDR$3lq)!#*D?dhVTEKA-!sqU3V9J^9>~&)Fm1-kxp9pZQC#uX?$c zdq4Wu?yi};Q}{Bs`*r!xg)i^?^Y&j$@7?;%&G(9bDgJEd>m7d8!6=6S1R(Gh2uwfT zDpu~^&A)ng%>AC|jKna0ZZ}$Pz3nRP`oXcQsBw|1?3WbzP`jb395vhShi*%0p0t%_ z=lEDTZ5=(Xx1K0Jai1vlPW$AjDO-5#Hro%=gG8Tqd#ciQKamGy2W3^~yf4z4SwS~= zo)(lID(bo1(z5z=OJCSx^R51iM_tjA(Z#(~M|X;q4<6*FyWR6p{K9MSv3NQdzGx3l z2cxlf;H@j(&4zu{Jaj)%)GH2Bm6PU5rMj;ksMYD#?PBFeve)Xm=DqrXH#zTqHW5oL z-^u#zG><;&xKej*_w%E#3ZSk^FByd>6)W^!etJ6z;&eEOx;^1dTdfLjPW}0!P^!M# z-$|CF*Lo62Jd*fXTnr!^;CEP(f}xOWLRgnh@eH(&9=r1>Wvt7pBaW7lg=Iv%x7ZbnN9X%6rtvWb4Id<#K`5yD0Bi?XCin$n)KDhF9Dxmv+q>8xDFs5qdrko?q^Dsmsxr z59L~Qd5^fM*^SR{xK1)%#mJHHMoz;o+=xW)Pyr#YxUsuOB_yu`?UjEhI zzxRH+`#1R#4+ua20uX=z1Rwwb2tWV=5SR;0-z}6n)7`=c^5*Fl3kmllGpcD!V>M=2 zL5=%?Un7yP`x@6NArA2w*GTAumTy_1qeV`r`GOmkX*oP{m_cmKF^FYZK}gMrF+wfN z=Aj_m;aU{te@(yo#~(GK$qG%Q%%F^V{TE&of6|^-PWQHxn2b0kgHW5>wqLUyKddpq zoti_aUK5PjRv6g6CByP{gJ~q-AvY-}Trk}<%z)V@WrFA|Z~{knNMr=IAq-nki#bA8 zI!+W=zAln(ze;1G4rMx{mKT3bz|xxO-qxFdSY#8%D6es5(;BmVzs89rYK#~}H;L?9 zH%%%Wi}}njI5TC(5{8=cr7mL%iDsJ?j|@xKEyJ)F)un`KYI4ugB zq$f3hnC{(p6A%@Ya>}GjAaR&&ST)}Fxw_in#9>atf``3~b3MTQjL0^VmTY zXw0;QNvzP&Bx*!NpohMQtjN$UQGtu`33)X z-sz{}fB*y_009U<00Izz z00a^N-2WpHAOHafKmY;|fB*y_009U<00NsYfcyW=pJR*=0uX=z1Rwwb2tWV=5P$## GAn;$8TLWhR diff --git a/example/dev.db-journal b/example/dev.db-journal deleted file mode 100644 index 8265c0d58452618a47cb416c1528186a33679241..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8720 zcmeI$J&II85C`ztbvIC%(Ma$R4OQLMRo!Uj8H@~u{)9o@$izTo4&W(7H_(%;XD~M~ z@CeqtSzOr2P_SO`=r;|o{`0F&UaeMk{pSLwYXvx8KV3a|xB0nwvA)u!T_#`xCSU?4 zU;-v!0w!PrCSU@$1orpO?>*nIS5Nd4>MnICb@FtcJUNQeT&b-(m^D;i0s>^HR6O+D zrHb_IXYRg^5``s~nJGf@If96^jy#C~MN;VlN-lnO4_<%r9w{Q>_VwHC+>KZL4mXC85B5jqr^x90=3+7 z$S`9|al|xGC=cDtc{ZtGEM+f`nJ^;-LfKyI+Dkg_>^FCA0?|xBgvAv~=qT0d3dnE- z5dwqO4$L^RP^B0Pu@+VmWL*Z$)WIi~GNXhbF$!T&31%M}Ckg;q@m3)4A^IgySav?| zH>Wp&a3B^Wb!m!2DT=F^i%XGJJU4AlsX1!%q;pHksc&OU2cFbs^TcT|NRM7oCyW+) z9aClu!h=0>n#Z!&LJ1Wc;u6ST2U?vhfgT@P#(EMO&~z05oc^VxS@b5YNY`$39#mr1 zqZFE#0hDoSM?9i$8cAAas92H!u|_UEh6y=G);32GO_thH_7iM(7rQsh`s0^}-+t+_ zUgiL2>#IL=fLll19!/e2e/**/*.test.js'], - testTimeout: 120000, - maxWorkers: 1, - globalSetup: 'detox/runners/jest/globalSetup', - globalTeardown: 'detox/runners/jest/globalTeardown', - reporters: ['detox/runners/jest/reporter'], - testEnvironment: 'detox/runners/jest/testEnvironment', - verbose: true, -}; diff --git a/example/e2e/starter.test.js b/example/e2e/starter.test.js deleted file mode 100644 index a1c5c14b..00000000 --- a/example/e2e/starter.test.js +++ /dev/null @@ -1,14 +0,0 @@ -/* eslint-disable no-undef */ -describe('Example', () => { - beforeAll(async () => { - await device.launchApp(); - }); - - beforeEach(async () => { - await device.reloadReactNative(); - }); - - it('Show basic test passed indicator', async () => { - await expect(element(by.id('test_indicator'))).toBeVisible(); - }); -}); diff --git a/example/global.css b/example/global.css deleted file mode 100644 index b5c61c95..00000000 --- a/example/global.css +++ /dev/null @@ -1,3 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; diff --git a/example/globals.d.ts b/example/globals.d.ts deleted file mode 100644 index a13e3136..00000000 --- a/example/globals.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/example/index.js b/example/index.js deleted file mode 100644 index e77bb4a6..00000000 --- a/example/index.js +++ /dev/null @@ -1,6 +0,0 @@ -import { AppRegistry } from 'react-native'; - -import { name as appName } from './app.json'; -import App from './src/App'; - -AppRegistry.registerComponent(appName, () => App); diff --git a/example/ios/.xcode.env b/example/ios/.xcode.env deleted file mode 100644 index 3d5782c7..00000000 --- a/example/ios/.xcode.env +++ /dev/null @@ -1,11 +0,0 @@ -# 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/example/ios/.xcode.env.local b/example/ios/.xcode.env.local deleted file mode 100644 index 36623492..00000000 --- a/example/ios/.xcode.env.local +++ /dev/null @@ -1 +0,0 @@ -export NODE_BINARY=$(command -v node) \ No newline at end of file diff --git a/example/ios/File.swift b/example/ios/File.swift deleted file mode 100644 index cb2608fd..00000000 --- a/example/ios/File.swift +++ /dev/null @@ -1,6 +0,0 @@ -// -// File.swift -// PrismaExample -// - -import Foundation diff --git a/example/ios/Podfile b/example/ios/Podfile deleted file mode 100644 index 05475bc6..00000000 --- a/example/ios/Podfile +++ /dev/null @@ -1,34 +0,0 @@ -# Resolve react_native_pods.rb with node to allow for hoisting -require Pod::Executable.execute_command('node', ['-p', - 'require.resolve( - "react-native/scripts/react_native_pods.rb", - {paths: [process.argv[1]]}, - )', __dir__]).strip - -platform :ios, min_ios_version_supported -prepare_react_native_project! -inhibit_all_warnings! - -linkage = ENV['USE_FRAMEWORKS'] -if linkage != nil - Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green - use_frameworks! :linkage => linkage.to_sym -end - -target 'PrismaExample' do - config = use_native_modules! - - use_react_native!( - :path => config[:reactNativePath], - :app_path => "#{Pod::Config.instance.installation_root}/.." - ) - - post_install do |installer| - # https://github.com/facebook/react-native/blob/main/packages/react-native/scripts/react_native_pods.rb#L197-L202 - react_native_post_install( - installer, - config[:reactNativePath], - :mac_catalyst_enabled => false - ) - end -end diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock deleted file mode 100644 index d04dbb46..00000000 --- a/example/ios/Podfile.lock +++ /dev/null @@ -1,1315 +0,0 @@ -PODS: - - boost (1.83.0) - - DoubleConversion (1.1.6) - - FBLazyVector (0.73.2) - - FBReactNativeSpec (0.73.2): - - RCT-Folly (= 2022.05.16.00) - - RCTRequired (= 0.73.2) - - RCTTypeSafety (= 0.73.2) - - React-Core (= 0.73.2) - - React-jsi (= 0.73.2) - - ReactCommon/turbomodule/core (= 0.73.2) - - fmt (6.2.1) - - GCDWebServer (3.5.4): - - GCDWebServer/Core (= 3.5.4) - - GCDWebServer/Core (3.5.4) - - glog (0.3.5) - - hermes-engine (0.73.2): - - hermes-engine/Pre-built (= 0.73.2) - - hermes-engine/Pre-built (0.73.2) - - libevent (2.1.12) - - RCT-Folly (2022.05.16.00): - - boost - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - RCT-Folly/Default (= 2022.05.16.00) - - RCT-Folly/Default (2022.05.16.00): - - boost - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - RCT-Folly/Fabric (2022.05.16.00): - - boost - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - RCT-Folly/Futures (2022.05.16.00): - - boost - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - libevent - - RCTRequired (0.73.2) - - RCTTypeSafety (0.73.2): - - FBLazyVector (= 0.73.2) - - RCTRequired (= 0.73.2) - - React-Core (= 0.73.2) - - React (0.73.2): - - React-Core (= 0.73.2) - - React-Core/DevSupport (= 0.73.2) - - React-Core/RCTWebSocket (= 0.73.2) - - React-RCTActionSheet (= 0.73.2) - - React-RCTAnimation (= 0.73.2) - - React-RCTBlob (= 0.73.2) - - React-RCTImage (= 0.73.2) - - React-RCTLinking (= 0.73.2) - - React-RCTNetwork (= 0.73.2) - - React-RCTSettings (= 0.73.2) - - React-RCTText (= 0.73.2) - - React-RCTVibration (= 0.73.2) - - React-callinvoker (0.73.2) - - React-Codegen (0.73.2): - - 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.73.2): - - glog - - hermes-engine - - RCT-Folly (= 2022.05.16.00) - - React-Core/Default (= 0.73.2) - - React-cxxreact - - React-hermes - - React-jsi - - React-jsiexecutor - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket (= 0.6.1) - - Yoga - - React-Core/CoreModulesHeaders (0.73.2): - - glog - - hermes-engine - - RCT-Folly (= 2022.05.16.00) - - React-Core/Default - - React-cxxreact - - React-hermes - - React-jsi - - React-jsiexecutor - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket (= 0.6.1) - - Yoga - - React-Core/Default (0.73.2): - - glog - - hermes-engine - - RCT-Folly (= 2022.05.16.00) - - React-cxxreact - - React-hermes - - React-jsi - - React-jsiexecutor - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket (= 0.6.1) - - Yoga - - React-Core/DevSupport (0.73.2): - - glog - - hermes-engine - - RCT-Folly (= 2022.05.16.00) - - React-Core/Default (= 0.73.2) - - React-Core/RCTWebSocket (= 0.73.2) - - React-cxxreact - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector (= 0.73.2) - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket (= 0.6.1) - - Yoga - - React-Core/RCTActionSheetHeaders (0.73.2): - - glog - - hermes-engine - - RCT-Folly (= 2022.05.16.00) - - React-Core/Default - - React-cxxreact - - React-hermes - - React-jsi - - React-jsiexecutor - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket (= 0.6.1) - - Yoga - - React-Core/RCTAnimationHeaders (0.73.2): - - glog - - hermes-engine - - RCT-Folly (= 2022.05.16.00) - - React-Core/Default - - React-cxxreact - - React-hermes - - React-jsi - - React-jsiexecutor - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket (= 0.6.1) - - Yoga - - React-Core/RCTBlobHeaders (0.73.2): - - glog - - hermes-engine - - RCT-Folly (= 2022.05.16.00) - - React-Core/Default - - React-cxxreact - - React-hermes - - React-jsi - - React-jsiexecutor - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket (= 0.6.1) - - Yoga - - React-Core/RCTImageHeaders (0.73.2): - - glog - - hermes-engine - - RCT-Folly (= 2022.05.16.00) - - React-Core/Default - - React-cxxreact - - React-hermes - - React-jsi - - React-jsiexecutor - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket (= 0.6.1) - - Yoga - - React-Core/RCTLinkingHeaders (0.73.2): - - glog - - hermes-engine - - RCT-Folly (= 2022.05.16.00) - - React-Core/Default - - React-cxxreact - - React-hermes - - React-jsi - - React-jsiexecutor - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket (= 0.6.1) - - Yoga - - React-Core/RCTNetworkHeaders (0.73.2): - - glog - - hermes-engine - - RCT-Folly (= 2022.05.16.00) - - React-Core/Default - - React-cxxreact - - React-hermes - - React-jsi - - React-jsiexecutor - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket (= 0.6.1) - - Yoga - - React-Core/RCTSettingsHeaders (0.73.2): - - glog - - hermes-engine - - RCT-Folly (= 2022.05.16.00) - - React-Core/Default - - React-cxxreact - - React-hermes - - React-jsi - - React-jsiexecutor - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket (= 0.6.1) - - Yoga - - React-Core/RCTTextHeaders (0.73.2): - - glog - - hermes-engine - - RCT-Folly (= 2022.05.16.00) - - React-Core/Default - - React-cxxreact - - React-hermes - - React-jsi - - React-jsiexecutor - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket (= 0.6.1) - - Yoga - - React-Core/RCTVibrationHeaders (0.73.2): - - glog - - hermes-engine - - RCT-Folly (= 2022.05.16.00) - - React-Core/Default - - React-cxxreact - - React-hermes - - React-jsi - - React-jsiexecutor - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket (= 0.6.1) - - Yoga - - React-Core/RCTWebSocket (0.73.2): - - glog - - hermes-engine - - RCT-Folly (= 2022.05.16.00) - - React-Core/Default (= 0.73.2) - - React-cxxreact - - React-hermes - - React-jsi - - React-jsiexecutor - - React-perflogger - - React-runtimescheduler - - React-utils - - SocketRocket (= 0.6.1) - - Yoga - - React-CoreModules (0.73.2): - - RCT-Folly (= 2022.05.16.00) - - RCTTypeSafety (= 0.73.2) - - React-Codegen - - React-Core/CoreModulesHeaders (= 0.73.2) - - React-jsi (= 0.73.2) - - React-NativeModulesApple - - React-RCTBlob - - React-RCTImage (= 0.73.2) - - ReactCommon - - SocketRocket (= 0.6.1) - - React-cxxreact (0.73.2): - - boost (= 1.83.0) - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly (= 2022.05.16.00) - - React-callinvoker (= 0.73.2) - - React-debug (= 0.73.2) - - React-jsi (= 0.73.2) - - React-jsinspector (= 0.73.2) - - React-logger (= 0.73.2) - - React-perflogger (= 0.73.2) - - React-runtimeexecutor (= 0.73.2) - - React-debug (0.73.2) - - React-Fabric (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric/animations (= 0.73.2) - - React-Fabric/attributedstring (= 0.73.2) - - React-Fabric/componentregistry (= 0.73.2) - - React-Fabric/componentregistrynative (= 0.73.2) - - React-Fabric/components (= 0.73.2) - - React-Fabric/core (= 0.73.2) - - React-Fabric/imagemanager (= 0.73.2) - - React-Fabric/leakchecker (= 0.73.2) - - React-Fabric/mounting (= 0.73.2) - - React-Fabric/scheduler (= 0.73.2) - - React-Fabric/telemetry (= 0.73.2) - - React-Fabric/templateprocessor (= 0.73.2) - - React-Fabric/textlayoutmanager (= 0.73.2) - - React-Fabric/uimanager (= 0.73.2) - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/animations (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/attributedstring (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/componentregistry (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/componentregistrynative (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/components (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric/components/inputaccessory (= 0.73.2) - - React-Fabric/components/legacyviewmanagerinterop (= 0.73.2) - - React-Fabric/components/modal (= 0.73.2) - - React-Fabric/components/rncore (= 0.73.2) - - React-Fabric/components/root (= 0.73.2) - - React-Fabric/components/safeareaview (= 0.73.2) - - React-Fabric/components/scrollview (= 0.73.2) - - React-Fabric/components/text (= 0.73.2) - - React-Fabric/components/textinput (= 0.73.2) - - React-Fabric/components/unimplementedview (= 0.73.2) - - React-Fabric/components/view (= 0.73.2) - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/components/inputaccessory (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/components/legacyviewmanagerinterop (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/components/modal (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/components/rncore (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/components/root (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/components/safeareaview (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/components/scrollview (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/components/text (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/components/textinput (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/components/unimplementedview (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/components/view (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - Yoga - - React-Fabric/core (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/imagemanager (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/leakchecker (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/mounting (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/scheduler (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/telemetry (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/templateprocessor (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/textlayoutmanager (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric/uimanager - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-Fabric/uimanager (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - React-FabricImage (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) - - RCTRequired (= 0.73.2) - - RCTTypeSafety (= 0.73.2) - - React-Fabric - - React-graphics - - React-ImageManager - - React-jsi - - React-jsiexecutor (= 0.73.2) - - React-logger - - React-rendererdebug - - React-utils - - ReactCommon - - Yoga - - React-graphics (0.73.2): - - glog - - RCT-Folly/Fabric (= 2022.05.16.00) - - React-Core/Default (= 0.73.2) - - React-utils - - React-hermes (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly (= 2022.05.16.00) - - RCT-Folly/Futures (= 2022.05.16.00) - - React-cxxreact (= 0.73.2) - - React-jsi - - React-jsiexecutor (= 0.73.2) - - React-jsinspector (= 0.73.2) - - React-perflogger (= 0.73.2) - - React-ImageManager (0.73.2): - - glog - - RCT-Folly/Fabric - - React-Core/Default - - React-debug - - React-Fabric - - React-graphics - - React-rendererdebug - - React-utils - - React-jserrorhandler (0.73.2): - - RCT-Folly/Fabric (= 2022.05.16.00) - - React-debug - - React-jsi - - React-Mapbuffer - - React-jsi (0.73.2): - - boost (= 1.83.0) - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly (= 2022.05.16.00) - - React-jsiexecutor (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly (= 2022.05.16.00) - - React-cxxreact (= 0.73.2) - - React-jsi (= 0.73.2) - - React-perflogger (= 0.73.2) - - React-jsinspector (0.73.2) - - React-logger (0.73.2): - - glog - - React-Mapbuffer (0.73.2): - - glog - - React-debug - - react-native-http-bridge-refurbished (1.3.2): - - GCDWebServer - - React - - react-native-network-info (5.2.1): - - React - - react-native-prisma (0.2.1): - - glog - - RCT-Folly (= 2022.05.16.00) - - React - - React-callinvoker - - React-Core - - react-native-quick-base64 (2.0.8): - - React-Core - - React-nativeconfig (0.73.2) - - React-NativeModulesApple (0.73.2): - - glog - - hermes-engine - - React-callinvoker - - React-Core - - React-cxxreact - - React-jsi - - React-runtimeexecutor - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - React-perflogger (0.73.2) - - React-RCTActionSheet (0.73.2): - - React-Core/RCTActionSheetHeaders (= 0.73.2) - - React-RCTAnimation (0.73.2): - - RCT-Folly (= 2022.05.16.00) - - RCTTypeSafety - - React-Codegen - - React-Core/RCTAnimationHeaders - - React-jsi - - React-NativeModulesApple - - ReactCommon - - React-RCTAppDelegate (0.73.2): - - RCT-Folly - - RCTRequired - - RCTTypeSafety - - React-Core - - React-CoreModules - - React-hermes - - React-nativeconfig - - React-NativeModulesApple - - React-RCTFabric - - React-RCTImage - - React-RCTNetwork - - React-runtimescheduler - - ReactCommon - - React-RCTBlob (0.73.2): - - hermes-engine - - RCT-Folly (= 2022.05.16.00) - - React-Codegen - - React-Core/RCTBlobHeaders - - React-Core/RCTWebSocket - - React-jsi - - React-NativeModulesApple - - React-RCTNetwork - - ReactCommon - - React-RCTFabric (0.73.2): - - glog - - hermes-engine - - RCT-Folly/Fabric (= 2022.05.16.00) - - React-Core - - React-debug - - React-Fabric - - React-FabricImage - - React-graphics - - React-ImageManager - - React-jsi - - React-nativeconfig - - React-RCTImage - - React-RCTText - - React-rendererdebug - - React-runtimescheduler - - React-utils - - Yoga - - React-RCTImage (0.73.2): - - RCT-Folly (= 2022.05.16.00) - - RCTTypeSafety - - React-Codegen - - React-Core/RCTImageHeaders - - React-jsi - - React-NativeModulesApple - - React-RCTNetwork - - ReactCommon - - React-RCTLinking (0.73.2): - - React-Codegen - - React-Core/RCTLinkingHeaders (= 0.73.2) - - React-jsi (= 0.73.2) - - React-NativeModulesApple - - ReactCommon - - ReactCommon/turbomodule/core (= 0.73.2) - - React-RCTNetwork (0.73.2): - - RCT-Folly (= 2022.05.16.00) - - RCTTypeSafety - - React-Codegen - - React-Core/RCTNetworkHeaders - - React-jsi - - React-NativeModulesApple - - ReactCommon - - React-RCTSettings (0.73.2): - - RCT-Folly (= 2022.05.16.00) - - RCTTypeSafety - - React-Codegen - - React-Core/RCTSettingsHeaders - - React-jsi - - React-NativeModulesApple - - ReactCommon - - React-RCTText (0.73.2): - - React-Core/RCTTextHeaders (= 0.73.2) - - Yoga - - React-RCTVibration (0.73.2): - - RCT-Folly (= 2022.05.16.00) - - React-Codegen - - React-Core/RCTVibrationHeaders - - React-jsi - - React-NativeModulesApple - - ReactCommon - - React-rendererdebug (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) - - RCT-Folly (= 2022.05.16.00) - - React-debug - - React-rncore (0.73.2) - - React-runtimeexecutor (0.73.2): - - React-jsi (= 0.73.2) - - React-runtimescheduler (0.73.2): - - glog - - hermes-engine - - RCT-Folly (= 2022.05.16.00) - - React-callinvoker - - React-cxxreact - - React-debug - - React-jsi - - React-rendererdebug - - React-runtimeexecutor - - React-utils - - React-utils (0.73.2): - - glog - - RCT-Folly (= 2022.05.16.00) - - React-debug - - ReactCommon (0.73.2): - - React-logger (= 0.73.2) - - ReactCommon/turbomodule (= 0.73.2) - - ReactCommon/turbomodule (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly (= 2022.05.16.00) - - React-callinvoker (= 0.73.2) - - React-cxxreact (= 0.73.2) - - React-jsi (= 0.73.2) - - React-logger (= 0.73.2) - - React-perflogger (= 0.73.2) - - ReactCommon/turbomodule/bridging (= 0.73.2) - - ReactCommon/turbomodule/core (= 0.73.2) - - ReactCommon/turbomodule/bridging (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly (= 2022.05.16.00) - - React-callinvoker (= 0.73.2) - - React-cxxreact (= 0.73.2) - - React-jsi (= 0.73.2) - - React-logger (= 0.73.2) - - React-perflogger (= 0.73.2) - - ReactCommon/turbomodule/core (0.73.2): - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - hermes-engine - - RCT-Folly (= 2022.05.16.00) - - React-callinvoker (= 0.73.2) - - React-cxxreact (= 0.73.2) - - React-jsi (= 0.73.2) - - React-logger (= 0.73.2) - - React-perflogger (= 0.73.2) - - RNReanimated (3.7.2): - - glog - - RCT-Folly (= 2022.05.16.00) - - React-Core - - ReactCommon/turbomodule/core - - 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`) - - 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`) - - RCT-Folly/Fabric (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-Fabric (from `../node_modules/react-native/ReactCommon`) - - React-FabricImage (from `../node_modules/react-native/ReactCommon`) - - React-graphics (from `../node_modules/react-native/ReactCommon/react/renderer/graphics`) - - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`) - - React-ImageManager (from `../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios`) - - React-jserrorhandler (from `../node_modules/react-native/ReactCommon/jserrorhandler`) - - 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-modern`) - - React-logger (from `../node_modules/react-native/ReactCommon/logger`) - - React-Mapbuffer (from `../node_modules/react-native/ReactCommon`) - - react-native-http-bridge-refurbished (from `../node_modules/react-native-http-bridge-refurbished`) - - react-native-network-info (from `../node_modules/react-native-network-info`) - - react-native-prisma (from `../..`) - - react-native-quick-base64 (from `../node_modules/react-native-quick-base64`) - - React-nativeconfig (from `../node_modules/react-native/ReactCommon`) - - 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-RCTFabric (from `../node_modules/react-native/React`) - - 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-rendererdebug (from `../node_modules/react-native/ReactCommon/react/renderer/debug`) - - 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`) - - RNReanimated (from `../node_modules/react-native-reanimated`) - - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) - -SPEC REPOS: - trunk: - - fmt - - GCDWebServer - - libevent - - 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" - 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-11-17-RNv0.73.0-21043a3fc062be445e56a2c10ecd8be028dd9cc5 - 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-Fabric: - :path: "../node_modules/react-native/ReactCommon" - React-FabricImage: - :path: "../node_modules/react-native/ReactCommon" - React-graphics: - :path: "../node_modules/react-native/ReactCommon/react/renderer/graphics" - React-hermes: - :path: "../node_modules/react-native/ReactCommon/hermes" - React-ImageManager: - :path: "../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios" - React-jserrorhandler: - :path: "../node_modules/react-native/ReactCommon/jserrorhandler" - 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-modern" - React-logger: - :path: "../node_modules/react-native/ReactCommon/logger" - React-Mapbuffer: - :path: "../node_modules/react-native/ReactCommon" - react-native-http-bridge-refurbished: - :path: "../node_modules/react-native-http-bridge-refurbished" - react-native-network-info: - :path: "../node_modules/react-native-network-info" - react-native-prisma: - :path: "../.." - react-native-quick-base64: - :path: "../node_modules/react-native-quick-base64" - React-nativeconfig: - :path: "../node_modules/react-native/ReactCommon" - 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-RCTFabric: - :path: "../node_modules/react-native/React" - 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-rendererdebug: - :path: "../node_modules/react-native/ReactCommon/react/renderer/debug" - 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" - RNReanimated: - :path: "../node_modules/react-native-reanimated" - Yoga: - :path: "../node_modules/react-native/ReactCommon/yoga" - -SPEC CHECKSUMS: - boost: d3f49c53809116a5d38da093a8aa78bf551aed09 - DoubleConversion: fea03f2699887d960129cc54bba7e52542b6f953 - FBLazyVector: fbc4957d9aa695250b55d879c1d86f79d7e69ab4 - FBReactNativeSpec: 86de768f89901ef6ed3207cd686362189d64ac88 - fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9 - GCDWebServer: 2c156a56c8226e2d5c0c3f208a3621ccffbe3ce4 - glog: c5d68082e772fa1c511173d6b30a9de2c05a69a2 - hermes-engine: b361c9ef5ef3cda53f66e195599b47e1f84ffa35 - libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913 - RCT-Folly: 7169b2b1c44399c76a47b5deaaba715eeeb476c0 - RCTRequired: 9b1e7e262745fb671e33c51c1078d093bd30e322 - RCTTypeSafety: a759e3b086eccf3e2cbf2493d22f28e082f958e6 - React: 805f5dd55bbdb92c36b4914c64aaae4c97d358dc - React-callinvoker: 6a697867607c990c2c2c085296ee32cfb5e47c01 - React-Codegen: c4447ffa339f4e7a22e0c9c800eec9084f31899c - React-Core: 49f66fecc7695464e9b7bc7dc7cd9473d2c60584 - React-CoreModules: 710e7c557a1a8180bd1645f5b4bf79f4bd3f5417 - React-cxxreact: 345857b5e4be000c0527df78be3b41a0677a20ce - React-debug: f1637bce73342b2f6eee4982508fdfb088667a87 - React-Fabric: 4dfcff8f14d8e5a7a60b11b7862dad2a9d99c65b - React-FabricImage: 4a9e9510b7f28bbde6a743b18c0cb941a142e938 - React-graphics: dd5af9d8b1b45171fd6933e19fed522f373bcb10 - React-hermes: a52d183a5cf8ccb7020ce3df4275b89d01e6b53e - React-ImageManager: c5b7db131eff71443d7f3a8d686fd841d18befd3 - React-jserrorhandler: 97a6a12e2344c3c4fdd7ba1edefb005215c732f8 - React-jsi: a182068133f80918cd0eec77875abaf943a0b6be - React-jsiexecutor: dacd00ce8a18fc00a0ae6c25e3015a6437e5d2e8 - React-jsinspector: 03644c063fc3621c9a4e8bf263a8150909129618 - React-logger: 66b168e2b2bee57bd8ce9e69f739d805732a5570 - React-Mapbuffer: 9ee041e1d7be96da6d76a251f92e72b711c651d6 - react-native-http-bridge-refurbished: 88fe66aa55e63807bd8cbaa372c062bc76ed4962 - react-native-network-info: d1290ffc0bd0709e11436f5b8d7f605dcc5c4530 - react-native-prisma: abb2f1b788c7fde4f056fa7d125fa82e706fa8dd - react-native-quick-base64: 777057ea4286f806b00259ede65dc79c7c706320 - React-nativeconfig: d753fbbc8cecc8ae413d615599ac378bbf6999bb - React-NativeModulesApple: 964f4eeab1b4325e8b6a799cf4444c3fd4eb0a9c - React-perflogger: 29efe63b7ef5fbaaa50ef6eaa92482f98a24b97e - React-RCTActionSheet: 69134c62aefd362027b20da01cd5d14ffd39db3f - React-RCTAnimation: 3b5a57087c7a5e727855b803d643ac1d445488f5 - React-RCTAppDelegate: a3ce9b69c0620a1717d08e826d4dc7ad8a3a3cae - React-RCTBlob: 26ea660f2be1e6de62f2d2ad9a9c7b9bfabb786f - React-RCTFabric: bb6dbbff2f80b9489f8b2f1d2554aa040aa2e3cd - React-RCTImage: 27b27f4663df9e776d0549ed2f3536213e793f1b - React-RCTLinking: 962880ce9d0e2ea83fd182953538fc4ed757d4da - React-RCTNetwork: 73a756b44d4ad584bae13a5f1484e3ce12accac8 - React-RCTSettings: 6d7f8d807f05de3d01cfb182d14e5f400716faac - React-RCTText: 73006e95ca359595c2510c1c0114027c85a6ddd3 - React-RCTVibration: 599f427f9cbdd9c4bf38959ca020e8fef0717211 - React-rendererdebug: f2946e0a1c3b906e71555a7c4a39aa6a6c0e639b - React-rncore: 74030de0ffef7b1a3fb77941168624534cc9ae7f - React-runtimeexecutor: 2d1f64f58193f00a3ad71d3f89c2bfbfe11cf5a5 - React-runtimescheduler: df8945a656356ff10f58f65a70820478bfcf33ad - React-utils: f5bc61e7ea3325c0732ae2d755f4441940163b85 - ReactCommon: 45b5d4f784e869c44a6f5a8fad5b114ca8f78c53 - RNReanimated: 3850671fd0c67051ea8e1e648e8c3e86bf3a28eb - SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17 - Yoga: 13c8ef87792450193e117976337b8527b49e8c03 - -PODFILE CHECKSUM: 0485f7e52cf89aa2ec3fcb550f67bb9b58bd9c2b - -COCOAPODS: 1.15.2 diff --git a/example/ios/PrismaExample-Bridging-Header.h b/example/ios/PrismaExample-Bridging-Header.h deleted file mode 100644 index e11d920b..00000000 --- a/example/ios/PrismaExample-Bridging-Header.h +++ /dev/null @@ -1,3 +0,0 @@ -// -// Use this file to import your target's public headers that you would like to expose to Swift. -// diff --git a/example/ios/PrismaExample.xcodeproj/project.pbxproj b/example/ios/PrismaExample.xcodeproj/project.pbxproj deleted file mode 100644 index 2526ad6f..00000000 --- a/example/ios/PrismaExample.xcodeproj/project.pbxproj +++ /dev/null @@ -1,527 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 54; - objects = { - -/* Begin PBXBuildFile section */ - 0C80B921A6F3F58F76C31292 /* libPods-PrismaExample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-PrismaExample.a */; }; - 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 */; }; - 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 00E356F21AD99517003FC87E /* PrismaExampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PrismaExampleTests.m; sourceTree = ""; }; - 13B07F961A680F5B00A75B9A /* Prisma.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Prisma.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = PrismaExample/AppDelegate.h; sourceTree = ""; }; - 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = PrismaExample/AppDelegate.mm; sourceTree = ""; }; - 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = PrismaExample/Images.xcassets; sourceTree = ""; }; - 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = PrismaExample/Info.plist; sourceTree = ""; }; - 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = PrismaExample/main.m; sourceTree = ""; }; - 19F6CBCC0A4E27FBF8BF4A61 /* libPods-PrismaExample-PrismaExampleTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-PrismaExample-PrismaExampleTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 3B4392A12AC88292D35C810B /* Pods-PrismaExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PrismaExample.debug.xcconfig"; path = "Target Support Files/Pods-PrismaExample/Pods-PrismaExample.debug.xcconfig"; sourceTree = ""; }; - 5709B34CF0A7D63546082F79 /* Pods-PrismaExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PrismaExample.release.xcconfig"; path = "Target Support Files/Pods-PrismaExample/Pods-PrismaExample.release.xcconfig"; sourceTree = ""; }; - 5B7EB9410499542E8C5724F5 /* Pods-PrismaExample-PrismaExampleTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PrismaExample-PrismaExampleTests.debug.xcconfig"; path = "Target Support Files/Pods-PrismaExample-PrismaExampleTests/Pods-PrismaExample-PrismaExampleTests.debug.xcconfig"; sourceTree = ""; }; - 5DCACB8F33CDC322A6C60F78 /* libPods-PrismaExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-PrismaExample.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = PrismaExample/LaunchScreen.storyboard; sourceTree = ""; }; - 89C6BE57DB24E9ADA2F236DE /* Pods-PrismaExample-PrismaExampleTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PrismaExample-PrismaExampleTests.release.xcconfig"; path = "Target Support Files/Pods-PrismaExample-PrismaExampleTests/Pods-PrismaExample-PrismaExampleTests.release.xcconfig"; sourceTree = ""; }; - ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 0C80B921A6F3F58F76C31292 /* libPods-PrismaExample.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 00E356EF1AD99517003FC87E /* PrismaExampleTests */ = { - isa = PBXGroup; - children = ( - 00E356F21AD99517003FC87E /* PrismaExampleTests.m */, - 00E356F01AD99517003FC87E /* Supporting Files */, - ); - path = PrismaExampleTests; - sourceTree = ""; - }; - 00E356F01AD99517003FC87E /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 00E356F11AD99517003FC87E /* Info.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - 13B07FAE1A68108700A75B9A /* PrismaExample */ = { - isa = PBXGroup; - children = ( - 13B07FAF1A68108700A75B9A /* AppDelegate.h */, - 13B07FB01A68108700A75B9A /* AppDelegate.mm */, - 13B07FB51A68108700A75B9A /* Images.xcassets */, - 13B07FB61A68108700A75B9A /* Info.plist */, - 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */, - 13B07FB71A68108700A75B9A /* main.m */, - ); - name = PrismaExample; - sourceTree = ""; - }; - 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { - isa = PBXGroup; - children = ( - ED297162215061F000B7C4FE /* JavaScriptCore.framework */, - 5DCACB8F33CDC322A6C60F78 /* libPods-PrismaExample.a */, - 19F6CBCC0A4E27FBF8BF4A61 /* libPods-PrismaExample-PrismaExampleTests.a */, - ); - name = Frameworks; - sourceTree = ""; - }; - 832341AE1AAA6A7D00B99B32 /* Libraries */ = { - isa = PBXGroup; - children = ( - ); - name = Libraries; - sourceTree = ""; - }; - 83CBB9F61A601CBA00E9B192 = { - isa = PBXGroup; - children = ( - 13B07FAE1A68108700A75B9A /* PrismaExample */, - 832341AE1AAA6A7D00B99B32 /* Libraries */, - 00E356EF1AD99517003FC87E /* PrismaExampleTests */, - 83CBBA001A601CBA00E9B192 /* Products */, - 2D16E6871FA4F8E400B85C8A /* Frameworks */, - BBD78D7AC51CEA395F1C20DB /* Pods */, - ); - indentWidth = 2; - sourceTree = ""; - tabWidth = 2; - usesTabs = 0; - }; - 83CBBA001A601CBA00E9B192 /* Products */ = { - isa = PBXGroup; - children = ( - 13B07F961A680F5B00A75B9A /* Prisma.app */, - ); - name = Products; - sourceTree = ""; - }; - BBD78D7AC51CEA395F1C20DB /* Pods */ = { - isa = PBXGroup; - children = ( - 3B4392A12AC88292D35C810B /* Pods-PrismaExample.debug.xcconfig */, - 5709B34CF0A7D63546082F79 /* Pods-PrismaExample.release.xcconfig */, - 5B7EB9410499542E8C5724F5 /* Pods-PrismaExample-PrismaExampleTests.debug.xcconfig */, - 89C6BE57DB24E9ADA2F236DE /* Pods-PrismaExample-PrismaExampleTests.release.xcconfig */, - ); - path = Pods; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 13B07F861A680F5B00A75B9A /* PrismaExample */ = { - isa = PBXNativeTarget; - buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "PrismaExample" */; - buildPhases = ( - C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */, - 13B07F871A680F5B00A75B9A /* Sources */, - 13B07F8C1A680F5B00A75B9A /* Frameworks */, - 13B07F8E1A680F5B00A75B9A /* Resources */, - 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, - 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */, - E235C05ADACE081382539298 /* [CP] Copy Pods Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = PrismaExample; - productName = PrismaExample; - productReference = 13B07F961A680F5B00A75B9A /* Prisma.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 83CBB9F71A601CBA00E9B192 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1210; - TargetAttributes = { - 13B07F861A680F5B00A75B9A = { - LastSwiftMigration = 1120; - }; - }; - }; - buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "PrismaExample" */; - compatibilityVersion = "Xcode 12.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 83CBB9F61A601CBA00E9B192; - productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 13B07F861A680F5B00A75B9A /* PrismaExample */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 13B07F8E1A680F5B00A75B9A /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */, - 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "$(SRCROOT)/.xcode.env.local", - "$(SRCROOT)/.xcode.env", - ); - name = "Bundle React Native code and images"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "set -e\n\nWITH_ENVIRONMENT=\"../node_modules/react-native/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"../node_modules/react-native/scripts/react-native-xcode.sh\"\nPRISMA_MIGRATIONS=\"../../copy-migrations.sh\"\n\n/bin/sh -c $PRISMA_MIGRATIONS\n\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\"\n"; - }; - 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-PrismaExample/Pods-PrismaExample-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-PrismaExample/Pods-PrismaExample-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-PrismaExample/Pods-PrismaExample-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - C38B50BA6285516D6DCD4F65 /* [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-PrismaExample-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; - }; - E235C05ADACE081382539298 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-PrismaExample/Pods-PrismaExample-resources-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-PrismaExample/Pods-PrismaExample-resources-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-PrismaExample/Pods-PrismaExample-resources.sh\"\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 */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 13B07F941A680F5B00A75B9A /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-PrismaExample.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 24CMR7378R; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = PrismaExample/Info.plist; - INFOPLIST_KEY_CFBundleDisplayName = Prisma; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-lc++", - ); - PRODUCT_BUNDLE_IDENTIFIER = io.prisma.example; - PRODUCT_NAME = Prisma; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; - SUPPORTS_MACCATALYST = NO; - SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; - SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = 1; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Debug; - }; - 13B07F951A680F5B00A75B9A /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-PrismaExample.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 24CMR7378R; - INFOPLIST_FILE = PrismaExample/Info.plist; - INFOPLIST_KEY_CFBundleDisplayName = Prisma; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-lc++", - ); - PRODUCT_BUNDLE_IDENTIFIER = io.prisma.example; - PRODUCT_NAME = Prisma; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; - SUPPORTS_MACCATALYST = NO; - SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; - SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = 1; - 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++20"; - 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_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - 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)", - ); - 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.4; - LD_RUNPATH_SEARCH_PATHS = ( - /usr/lib/swift, - "$(inherited)", - ); - LIBRARY_SEARCH_PATHS = ( - "\"$(SDKROOT)/usr/lib/swift\"", - "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", - "\"$(inherited)\"", - ); - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - OTHER_CFLAGS = "$(inherited)"; - OTHER_CPLUSPLUSFLAGS = ( - "$(OTHER_CFLAGS)", - "-DFOLLY_NO_CONFIG", - "-DFOLLY_MOBILE=1", - "-DFOLLY_USE_LIBCPP=1", - "-DFOLLY_CFG_NO_COROUTINES=1", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - "-Wl", - "-ld_classic", - ); - REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; - SDKROOT = iphoneos; - USE_HERMES = true; - }; - name = Debug; - }; - 83CBBA211A601CBA00E9B192 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++20"; - 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_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - 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_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.4; - LD_RUNPATH_SEARCH_PATHS = ( - /usr/lib/swift, - "$(inherited)", - ); - LIBRARY_SEARCH_PATHS = ( - "\"$(SDKROOT)/usr/lib/swift\"", - "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", - "\"$(inherited)\"", - ); - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_CFLAGS = "$(inherited)"; - OTHER_CPLUSPLUSFLAGS = ( - "$(OTHER_CFLAGS)", - "-DFOLLY_NO_CONFIG", - "-DFOLLY_MOBILE=1", - "-DFOLLY_USE_LIBCPP=1", - "-DFOLLY_CFG_NO_COROUTINES=1", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - "-Wl", - "-ld_classic", - ); - REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; - SDKROOT = iphoneos; - USE_HERMES = true; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "PrismaExample" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 13B07F941A680F5B00A75B9A /* Debug */, - 13B07F951A680F5B00A75B9A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "PrismaExample" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 83CBBA201A601CBA00E9B192 /* Debug */, - 83CBBA211A601CBA00E9B192 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; -} diff --git a/example/ios/PrismaExample.xcodeproj/xcshareddata/xcschemes/Debug.xcscheme b/example/ios/PrismaExample.xcodeproj/xcshareddata/xcschemes/Debug.xcscheme deleted file mode 100644 index d614870b..00000000 --- a/example/ios/PrismaExample.xcodeproj/xcshareddata/xcschemes/Debug.xcscheme +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/example/ios/PrismaExample.xcodeproj/xcshareddata/xcschemes/Release.xcscheme b/example/ios/PrismaExample.xcodeproj/xcshareddata/xcschemes/Release.xcscheme deleted file mode 100644 index ad3ee8e9..00000000 --- a/example/ios/PrismaExample.xcodeproj/xcshareddata/xcschemes/Release.xcscheme +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/example/ios/PrismaExample.xcworkspace/contents.xcworkspacedata b/example/ios/PrismaExample.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 34d332a0..00000000 --- a/example/ios/PrismaExample.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/example/ios/PrismaExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/ios/PrismaExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d98100..00000000 --- a/example/ios/PrismaExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/example/ios/PrismaExample/AppDelegate.h b/example/ios/PrismaExample/AppDelegate.h deleted file mode 100644 index 5d280825..00000000 --- a/example/ios/PrismaExample/AppDelegate.h +++ /dev/null @@ -1,6 +0,0 @@ -#import -#import - -@interface AppDelegate : RCTAppDelegate - -@end diff --git a/example/ios/PrismaExample/AppDelegate.mm b/example/ios/PrismaExample/AppDelegate.mm deleted file mode 100644 index 399c48db..00000000 --- a/example/ios/PrismaExample/AppDelegate.mm +++ /dev/null @@ -1,33 +0,0 @@ -#import "AppDelegate.h" -#import "GCDWebServer/GCDWebServer.h" -#import - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - self.moduleName = @"PrismaExample"; - // 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 = @{}; - - [GCDWebServer setLogLevel:4]; - - return [super application:application didFinishLaunchingWithOptions:launchOptions]; -} - -- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge -{ - return [self getBundleURL]; -} - -- (NSURL *)getBundleURL -{ -#if DEBUG - return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"]; -#else - return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; -#endif -} - -@end diff --git a/example/ios/PrismaExample/Images.xcassets/AppIcon.appiconset/Contents.json b/example/ios/PrismaExample/Images.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index f156cb6f..00000000 --- a/example/ios/PrismaExample/Images.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "images" : [ - { - "filename" : "Frame 20.png", - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/example/ios/PrismaExample/Images.xcassets/AppIcon.appiconset/Frame 20.png b/example/ios/PrismaExample/Images.xcassets/AppIcon.appiconset/Frame 20.png deleted file mode 100644 index a5a32ce9be8c6c3feb0cfdba74ab1398be4ccad5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25900 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 diff --git a/example/ios/PrismaExample/Images.xcassets/Contents.json b/example/ios/PrismaExample/Images.xcassets/Contents.json deleted file mode 100644 index 73c00596..00000000 --- a/example/ios/PrismaExample/Images.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/example/ios/PrismaExample/Images.xcassets/Logo.imageset/Contents.json b/example/ios/PrismaExample/Images.xcassets/Logo.imageset/Contents.json deleted file mode 100644 index 5b033657..00000000 --- a/example/ios/PrismaExample/Images.xcassets/Logo.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Frame 20.png", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/example/ios/PrismaExample/Images.xcassets/Logo.imageset/Frame 20.png b/example/ios/PrismaExample/Images.xcassets/Logo.imageset/Frame 20.png deleted file mode 100644 index a5a32ce9be8c6c3feb0cfdba74ab1398be4ccad5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25900 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 diff --git a/example/ios/PrismaExample/Info.plist b/example/ios/PrismaExample/Info.plist deleted file mode 100644 index 7df94dfb..00000000 --- a/example/ios/PrismaExample/Info.plist +++ /dev/null @@ -1,51 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - Prisma - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - $(MARKETING_VERSION) - CFBundleSignature - ???? - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - LSRequiresIPhoneOS - - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - NSAllowsLocalNetworking - - - NSLocationWhenInUseUsageDescription - - UILaunchStoryboardName - LaunchScreen - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UIViewControllerBasedStatusBarAppearance - - - diff --git a/example/ios/PrismaExample/LaunchScreen.storyboard b/example/ios/PrismaExample/LaunchScreen.storyboard deleted file mode 100644 index c27f5a17..00000000 --- a/example/ios/PrismaExample/LaunchScreen.storyboard +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/example/ios/PrismaExample/main.m b/example/ios/PrismaExample/main.m deleted file mode 100644 index d645c724..00000000 --- a/example/ios/PrismaExample/main.m +++ /dev/null @@ -1,10 +0,0 @@ -#import - -#import "AppDelegate.h" - -int main(int argc, char *argv[]) -{ - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/example/ios/PrismaExampleTests/Info.plist b/example/ios/PrismaExampleTests/Info.plist deleted file mode 100644 index ba72822e..00000000 --- a/example/ios/PrismaExampleTests/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/example/ios/PrismaExampleTests/PrismaExampleTests.m b/example/ios/PrismaExampleTests/PrismaExampleTests.m deleted file mode 100644 index fbc04f84..00000000 --- a/example/ios/PrismaExampleTests/PrismaExampleTests.m +++ /dev/null @@ -1,66 +0,0 @@ -#import -#import - -#import -#import - -#define TIMEOUT_SECONDS 600 -#define TEXT_TO_LOOK_FOR @"Welcome to React" - -@interface PrismaExampleTests : XCTestCase - -@end - -@implementation PrismaExampleTests - -- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL (^)(UIView *view))test -{ - if (test(view)) { - return YES; - } - for (UIView *subview in [view subviews]) { - if ([self findSubviewInView:subview matching:test]) { - return YES; - } - } - return NO; -} - -- (void)testRendersWelcomeScreen -{ - UIViewController *vc = [[[RCTSharedApplication() delegate] window] rootViewController]; - NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS]; - BOOL foundElement = NO; - - __block NSString *redboxError = nil; -#ifdef DEBUG - RCTSetLogFunction( - ^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) { - if (level >= RCTLogLevelError) { - redboxError = message; - } - }); -#endif - - while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) { - [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; - [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; - - foundElement = [self findSubviewInView:vc.view - matching:^BOOL(UIView *view) { - if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) { - return YES; - } - return NO; - }]; - } - -#ifdef DEBUG - RCTSetLogFunction(RCTDefaultLogFunction); -#endif - - XCTAssertNil(redboxError, @"RedBox error: %@", redboxError); - XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS); -} - -@end diff --git a/example/ios/link-assets-manifest.json b/example/ios/link-assets-manifest.json deleted file mode 100644 index f43dc5ad..00000000 --- a/example/ios/link-assets-manifest.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "migIndex": 1, - "data": [ - { - "path": "migrations/20240117094901_init/migration.sql", - "sha1": "c2cba8c542661584c2409ac71985d902b25bdd71" - }, - { - "path": "migrations/migration_lock.toml", - "sha1": "d31af1640ea175950b3b0e25f68481f74ef5d8ed" - } - ] -} diff --git a/example/metro.config.js b/example/metro.config.js deleted file mode 100644 index e3999cb0..00000000 --- a/example/metro.config.js +++ /dev/null @@ -1,51 +0,0 @@ -/* eslint-env node */ -const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config'); -const escape = require('escape-string-regexp'); -const exclusionList = require('metro-config/src/defaults/exclusionList'); -const { withNativeWind } = require('nativewind/metro'); -const path = require('path'); - -const pak = require('../package.json'); - -const root = path.resolve(__dirname, '..'); -const modules = Object.keys({ ...pak.peerDependencies }); - -/** - * Metro configuration - * https://facebook.github.io/metro/docs/configuration - * - * @type {import('metro-config').MetroConfig} - */ -const config = { - watchFolders: [root], - - // We need to make sure that only one version is loaded for peerDependencies - // So we block them at the root, and alias them to the versions in example's node_modules - resolver: { - blacklistRE: exclusionList( - modules.map( - (m) => - new RegExp(`^${escape(path.join(root, 'node_modules', m))}\\/.*$`) - ) - ), - - extraNodeModules: modules.reduce((acc, name) => { - acc[name] = path.join(__dirname, 'node_modules', name); - return acc; - }, {}), - }, - - transformer: { - getTransformOptions: async () => ({ - transform: { - experimentalImportSupport: false, - inlineRequires: true, - }, - }), - }, -}; - -module.exports = withNativeWind( - mergeConfig(getDefaultConfig(__dirname), config), - { input: './global.css' } -); diff --git a/example/migrations/0_init/migration.sql b/example/migrations/0_init/migration.sql deleted file mode 100644 index d2e6651e..00000000 --- a/example/migrations/0_init/migration.sql +++ /dev/null @@ -1,53 +0,0 @@ --- CreateTable -CREATE TABLE "User" ( - "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, - "email" TEXT NOT NULL, - "name" TEXT, - "nick" TEXT -); - --- CreateTable -CREATE TABLE "Profile" ( - "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, - "bio" TEXT NOT NULL, - "userId" INTEGER NOT NULL, - CONSTRAINT "Profile_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE -); - --- CreateTable -CREATE TABLE "Post" ( - "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, - "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updatedAt" DATETIME NOT NULL, - "title" TEXT NOT NULL, - "published" BOOLEAN NOT NULL DEFAULT false, - "authorId" INTEGER NOT NULL, - CONSTRAINT "Post_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE -); - --- CreateTable -CREATE TABLE "Category" ( - "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, - "name" TEXT NOT NULL -); - --- CreateTable -CREATE TABLE "_CategoryToPost" ( - "A" INTEGER NOT NULL, - "B" INTEGER NOT NULL, - CONSTRAINT "_CategoryToPost_A_fkey" FOREIGN KEY ("A") REFERENCES "Category" ("id") ON DELETE CASCADE ON UPDATE CASCADE, - CONSTRAINT "_CategoryToPost_B_fkey" FOREIGN KEY ("B") REFERENCES "Post" ("id") ON DELETE CASCADE ON UPDATE CASCADE -); - --- CreateIndex -CREATE UNIQUE INDEX "User_email_key" ON "User"("email"); - --- CreateIndex -CREATE UNIQUE INDEX "Profile_userId_key" ON "Profile"("userId"); - --- CreateIndex -CREATE UNIQUE INDEX "_CategoryToPost_AB_unique" ON "_CategoryToPost"("A", "B"); - --- CreateIndex -CREATE INDEX "_CategoryToPost_B_index" ON "_CategoryToPost"("B"); - diff --git a/example/migrations/20240118142005_nick2/migration.sql b/example/migrations/20240118142005_nick2/migration.sql deleted file mode 100644 index 6af8f23f..00000000 --- a/example/migrations/20240118142005_nick2/migration.sql +++ /dev/null @@ -1,2 +0,0 @@ --- AlterTable -ALTER TABLE "User" ADD COLUMN "nick2" TEXT; diff --git a/example/migrations/20240119102352_nick3/migration.sql b/example/migrations/20240119102352_nick3/migration.sql deleted file mode 100644 index 42103e81..00000000 --- a/example/migrations/20240119102352_nick3/migration.sql +++ /dev/null @@ -1,2 +0,0 @@ --- AlterTable -ALTER TABLE "User" ADD COLUMN "nick3" TEXT; diff --git a/example/migrations/20240119143417_nick4/migration.sql b/example/migrations/20240119143417_nick4/migration.sql deleted file mode 100644 index 616a6b93..00000000 --- a/example/migrations/20240119143417_nick4/migration.sql +++ /dev/null @@ -1,2 +0,0 @@ --- AlterTable -ALTER TABLE "User" ADD COLUMN "nick4" TEXT; diff --git a/example/migrations/20240122145141_my_field/migration.sql b/example/migrations/20240122145141_my_field/migration.sql deleted file mode 100644 index 17fa170f..00000000 --- a/example/migrations/20240122145141_my_field/migration.sql +++ /dev/null @@ -1,2 +0,0 @@ --- AlterTable -ALTER TABLE "User" ADD COLUMN "myField" TEXT; diff --git a/example/migrations/migration_lock.toml b/example/migrations/migration_lock.toml deleted file mode 100644 index e5e5c470..00000000 --- a/example/migrations/migration_lock.toml +++ /dev/null @@ -1,3 +0,0 @@ -# Please do not edit this file manually -# It should be added in your version-control system (i.e. Git) -provider = "sqlite" \ No newline at end of file diff --git a/example/package.json b/example/package.json deleted file mode 100644 index 8439e183..00000000 --- a/example/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "react-native-prisma-example", - "version": "0.0.1", - "private": true, - "scripts": { - "android": "react-native run-android", - "ios": "react-native run-ios --simulator='iPhone 15' --scheme='Debug'", - "start": "react-native start", - "pods": "pod-install", - "build:android": "cd android && ./gradlew assembleDebug --no-daemon --console=plain -PreactNativeArchitectures=arm64-v8a", - "build:ios": "cd ios && xcodebuild -workspace PrismaExample.xcworkspace -scheme PrismaExample -configuration Debug -sdk iphonesimulator CC=clang CPLUSPLUS=clang++ LD=clang LDPLUSPLUS=clang++ GCC_OPTIMIZATION_LEVEL=0 GCC_PRECOMPILE_PREFIX_HEADER=YES ASSETCATALOG_COMPILER_OPTIMIZATION=time DEBUG_INFORMATION_FORMAT=dwarf COMPILER_INDEX_STORE_ENABLE=NO", - "ios:release": "react-native run-ios --simulator='iPhone 15' --scheme='Release'", - "prisma:generate": "prisma generate" - }, - "dependencies": { - "@prisma/client": "6.1.0-dev.17", - "chance": "^1.1.11", - "nativewind": "^4.0.23", - "react": "18.2.0", - "react-native": "0.73.2", - "react-native-http-bridge-refurbished": "^1.2.9", - "react-native-network-info": "^5.2.1", - "react-native-quick-base64": "^2.0.8", - "react-native-reanimated": "^3.7.2", - "react-native-url-polyfill": "^2.0.0", - "text-encoding": "^0.7.0" - }, - "devDependencies": { - "@babel/core": "^7.20.0", - "@babel/preset-env": "^7.20.0", - "@babel/runtime": "^7.20.0", - "@react-native/babel-preset": "^0.73.18", - "@react-native/metro-config": "^0.73.2", - "@react-native/typescript-config": "^0.73.1", - "@types/chance": "^1.1.6", - "@types/text-encoding": "^0", - "babel-plugin-module-resolver": "^5.0.0", - "detox": "20.20.3", - "jest": "^29", - "pod-install": "0.2.0", - "prisma": "6.1.0-dev.17", - "tailwindcss": "^3.4.0" - }, - "engines": { - "node": ">=18" - } -} diff --git a/example/react-native.config.js b/example/react-native.config.js deleted file mode 100644 index 9ddf8c8f..00000000 --- a/example/react-native.config.js +++ /dev/null @@ -1,12 +0,0 @@ -/* eslint-env node */ -const path = require('path'); - -const pak = require('../package.json'); - -module.exports = { - dependencies: { - [pak.name]: { - root: path.join(__dirname, '..'), - }, - }, -}; diff --git a/example/schema.prisma b/example/schema.prisma deleted file mode 100644 index 94f5d399..00000000 --- a/example/schema.prisma +++ /dev/null @@ -1,46 +0,0 @@ -generator client { - provider = "prisma-client-js" - previewFeatures = ["reactNative"] -} - -datasource db { - provider = "sqlite" - url = "file:./dev.db" -} - -model User { - id Int @id @default(autoincrement()) - email String @unique - name String? - posts Post[] - profile Profile? - nick String? - nick2 String? - nick3 String? - nick4 String? - myField String? -} - -model Profile { - id Int @id @default(autoincrement()) - bio String - user User @relation(fields: [userId], references: [id]) - userId Int @unique -} - -model Post { - id Int @id @default(autoincrement()) - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt - title String - published Boolean @default(false) - author User @relation(fields: [authorId], references: [id]) - authorId Int - categories Category[] -} - -model Category { - id Int @id @default(autoincrement()) - name String - posts Post[] -} diff --git a/example/src/App.tsx b/example/src/App.tsx deleted file mode 100644 index 88a7319f..00000000 --- a/example/src/App.tsx +++ /dev/null @@ -1,112 +0,0 @@ -import '@prisma/react-native'; -import React, { useEffect, useState } from 'react'; -import { - Clipboard, - SafeAreaView, - ScrollView, - Text, - TouchableOpacity, - View, -} from 'react-native'; -import { NetworkInfo } from 'react-native-network-info'; -import { atob, btoa } from 'react-native-quick-base64'; - -import 'react-native-url-polyfill/auto'; -import '../global.css'; -import { Button } from './Button'; -import './server'; -import { - hooksPrisma, - createRandomUser, - deleteUsers, - initializeDB, - runE2EQuery, - // createRandomUserGeneric, -} from './db'; - -// global.TextEncoder = require('text-encoding').TextEncoder; -global.atob = atob; -global.btoa = btoa; - -export default function App() { - const [prismaTime, setPrismaTime] = useState(0); - const [IP, setIP] = useState(''); - const [dbInitialized, setDbInitialized] = useState(false); - const [e2eSuccess, setE2ESuccess] = useState(false); - - useEffect(() => { - const setup = async () => { - await initializeDB(); - NetworkInfo.getIPAddress().then((ip) => { - setIP(`${ip}:3000`); - }); - setDbInitialized(true); - await runE2EQuery(); - setE2ESuccess(true); - }; - - setup(); - }, []); - - const createUser = async () => { - const start = performance.now(); - - await createRandomUser(); - - const end = performance.now(); - setPrismaTime(end - start); - }; - - const users = hooksPrisma.user.useFindMany(); - - if (!dbInitialized) { - return ( - - Initializing database... - - ); - } - - const copyIP = () => { - Clipboard.setString(IP); - console.warn('IP copied to clipboard'); - }; - - return ( - - - - ▲ Prisma - {e2eSuccess ? ( - - ) : ( - - )} - - - - HTTP Server Running on Port 3000 - - - - - Engine Response - - {prismaTime.toFixed(0)}ms - - - {JSON.stringify(users, null, 4)} - - -