diff --git a/.github/actions/prepare/action.yml b/.github/actions/prepare/action.yml
new file mode 100644
index 00000000..033c0ebc
--- /dev/null
+++ b/.github/actions/prepare/action.yml
@@ -0,0 +1,24 @@
+name: Prepare
+description: Prepare CI environment
+
+runs:
+ using: composite
+ steps:
+ - name: Install Flutter
+ uses: subosito/flutter-action@v2
+ with:
+ flutter-version: "3.x"
+ channel: "stable"
+ - name: Download sqlite3.wasm
+ uses: actions/download-artifact@v4
+ with:
+ name: sqlite3-wasm
+ path: packages/sqlite3_wasm_build/dist/
+ - name: Install Melos
+ shell: sh
+ run: flutter pub global activate melos
+ - name: Install dependencies
+ shell: sh
+ env:
+ IS_IN_POWERSYNC_CI: 1
+ run: melos prepare
diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml
new file mode 100644
index 00000000..b0450c8c
--- /dev/null
+++ b/.github/workflows/check.yml
@@ -0,0 +1,61 @@
+name: Check packages and demos
+
+concurrency:
+ group: packages-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
+
+on:
+ push:
+ branches:
+ - "**"
+
+jobs:
+ setup:
+ uses: ./.github/workflows/prepare_wasm.yml
+
+ build:
+ runs-on: ubuntu-latest
+ needs: [setup]
+ steps:
+ - uses: actions/checkout@v4
+ - uses: ./.github/actions/prepare
+ - name: Check formatting
+ run: melos format:check:packages
+ - name: Lint
+ run: melos analyze:packages
+ - name: Publish dry-run
+ run: melos publish --dry-run --yes
+
+ pana:
+ runs-on: ubuntu-latest
+ needs: [setup]
+ steps:
+ - uses: actions/checkout@v4
+ - uses: ./.github/actions/prepare
+ - name: Check pana score
+ run: |
+ flutter pub global activate pana
+ melos analyze:packages:pana --no-select
+
+ test:
+ runs-on: ubuntu-latest
+ needs: [setup]
+ steps:
+ - uses: actions/checkout@v4
+ - uses: ./.github/actions/prepare
+ - name: Run flutter tests
+ run: melos test
+ - name: Run dart tests
+ run: melos test:web
+
+ check_demos:
+ runs-on: ubuntu-latest
+ needs: [setup]
+ steps:
+ - uses: actions/checkout@v4
+ - uses: ./.github/actions/prepare
+ - name: Check formatting
+ run: melos format:check:demos
+ - name: Lint
+ run: |
+ ./.github/workflows/scripts/copy-config.sh
+ melos analyze:demos
diff --git a/.github/workflows/demos.yml b/.github/workflows/demos.yml
deleted file mode 100644
index 1a83c277..00000000
--- a/.github/workflows/demos.yml
+++ /dev/null
@@ -1,31 +0,0 @@
-name: Demos checks
-
-concurrency:
- group: demos-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
-
-on:
- push:
- branches:
- - "**"
-
-jobs:
- build:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v3
- - name: Install Flutter
- uses: subosito/flutter-action@v2
- with:
- flutter-version: "3.x"
- channel: "stable"
-
- - name: Install Melos
- run: flutter pub global activate melos
- - name: Install dependencies
- run: melos prepare
- - name: Check formatting
- run: melos format:check:demos
- - name: Lint
- run: |
- ./.github/workflows/scripts/copy-config.sh
- melos analyze:demos
diff --git a/.github/workflows/packages.yml b/.github/workflows/packages.yml
deleted file mode 100644
index 4b8537c3..00000000
--- a/.github/workflows/packages.yml
+++ /dev/null
@@ -1,68 +0,0 @@
-name: Packages check
-
-concurrency:
- group: packages-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
-
-on:
- push:
- branches:
- - "**"
-
-jobs:
- build:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v3
- - name: Install Flutter
- uses: subosito/flutter-action@v2
- with:
- flutter-version: "3.x"
- channel: "stable"
-
- - name: Install Melos
- run: flutter pub global activate melos
- - name: Install dependencies
- run: melos prepare
- - name: Check formatting
- run: melos format:check:packages
- - name: Lint
- run: melos analyze:packages
- - name: Publish dry-run
- run: melos publish --dry-run --yes
-
- pana:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v3
- - name: Install Flutter
- uses: subosito/flutter-action@v2
- with:
- flutter-version: "3.x"
- channel: "stable"
-
- - name: Install Melos
- run: flutter pub global activate melos
- - name: Install dependencies
- run: melos prepare
- - name: Check pana score
- run: |
- flutter pub global activate pana
- melos analyze:packages:pana --no-select
-
- test:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v3
- - name: Install Flutter
- uses: subosito/flutter-action@v2
- with:
- flutter-version: "3.x"
- channel: "stable"
- - name: Install melos
- run: flutter pub global activate melos
- - name: Install dependencies and prepare project
- run: melos prepare
- - name: Run flutter tests
- run: melos test
- - name: Run dart tests
- run: melos test:web
diff --git a/.github/workflows/prepare_wasm.yml b/.github/workflows/prepare_wasm.yml
new file mode 100644
index 00000000..5da977c1
--- /dev/null
+++ b/.github/workflows/prepare_wasm.yml
@@ -0,0 +1,53 @@
+name: Build SQLite3 WASM
+
+on:
+ workflow_call:
+
+jobs:
+ compile_sqlite3_wasm:
+ name: Compile sqlite3 wasm
+ runs-on: macos-latest
+
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/cache@v4
+ id: cache_build
+ with:
+ path: packages/sqlite3_wasm_build/dist/
+ key: wasm-${{ runner.os }}-${{ hashFiles('packages/sqlite3_wasm_build/build.sh') }}
+
+ - name: Setup Homebrew
+ if: steps.cache_build.outputs.cache-hit != 'true'
+ id: set-up-homebrew
+ uses: Homebrew/actions/setup-homebrew@master
+ - name: Install Dart SDK
+ if: steps.cache_build.outputs.cache-hit != 'true'
+ uses: dart-lang/setup-dart@v1
+ - name: Setup macOS build dependencies
+ if: steps.cache_build.outputs.cache-hit != 'true'
+ run: brew install llvm lld binaryen wasi-libc wasi-runtimes
+ - name: Compile sqlite3.wasm on macOS
+ if: steps.cache_build.outputs.cache-hit != 'true'
+ working-directory: packages/sqlite3_wasm_build
+ run: ./build.sh
+
+ - name: Upload built sqlite3 binaries
+ uses: actions/upload-artifact@v4
+ with:
+ name: sqlite3-wasm
+ path: packages/sqlite3_wasm_build/dist/
+ if-no-files-found: error
+ retention-days: 1
+
+ - name: Setup Node.js
+ uses: actions/setup-node@v4
+ - uses: pnpm/action-setup@v2
+ name: Install pnpm
+ with:
+ run_install: false
+ version: 10
+ - name: Dry-run npm publish
+ working-directory: packages/sqlite3_wasm_build
+ run: |
+ pnpm i
+ pnpm publish --no-git-checks --dry-run
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index fb3a0ec4..6a63085c 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -5,6 +5,8 @@ on:
- "powersync-v[0-9]+.[0-9]+.[0-9]+"
- "powersync_attachments_helper-v[0-9]+.[0-9]+.[0-9]+*"
- "powersync_flutter_libs-v[0-9]+.[0-9]+.[0-9]+*"
+ - "powersync_core-v[0-9]+.[0-9]+.[0-9]+*"
+ - "powersync_sqlcipher-v[0-9]+.[0-9]+.[0-9]+*"
workflow_dispatch:
jobs:
@@ -35,7 +37,7 @@ jobs:
env:
GITHUBREF: ${{ github.ref }}
run: |
- PACKAGE_NAME=$(sed -E 's/refs\/tags\/([a-z0-9_]+)-v([0-9]+\.[0-9]+\.[0-9]+)/\1/' <<< $GITHUBREF) && \
+ PACKAGE_NAME=$(sed -E 's/refs\/tags\/([a-z0-9_]+)-v([0-9]+\.[0-9]+\.[0-9]+(\+[0-9]+)?)/\1/' <<< $GITHUBREF) && \
echo "PACKAGE_NAME=$PACKAGE_NAME" >> $GITHUB_ENV
echo "Package name: $PACKAGE_NAME"
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 3231dca0..0adbcd81 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -7,6 +7,9 @@ on:
- 'powersync-v[0-9]+.[0-9]+.[0-9]+'
jobs:
+ setup:
+ uses: ./.github/workflows/prepare_wasm.yml
+
build:
runs-on: ubuntu-latest
permissions:
@@ -15,18 +18,7 @@ jobs:
steps:
- name: Checkout Repository
uses: actions/checkout@v4
-
- - name: Install Flutter
- uses: subosito/flutter-action@v2
- with:
- flutter-version: '3.x'
- channel: 'stable'
-
- - name: Install Melos
- run: flutter pub global activate melos
-
- - name: Install Dependencies and Compile Assets
- run: melos prepare
+ - uses: ./.github/actions/prepare
- name: Create Draft Release
env:
@@ -39,4 +31,24 @@ jobs:
body="Release $tag
$changes"
gh release create "$tag" --title "$tag" --notes "$body"
- gh release upload "${{ github.ref_name }}" packages/powersync/assets/powersync_db.worker.js packages/powersync/assets/powersync_sync.worker.js
+ gh release upload "${{ github.ref_name }}" packages/powersync/assets/powersync_db.worker.js packages/powersync/assets/powersync_sync.worker.js packages/sqlite3_wasm_build/dist/*.wasm
+
+ - name: Setup Node.js
+ uses: actions/setup-node@v4
+ - uses: pnpm/action-setup@v2
+ name: Install pnpm
+ with:
+ run_install: false
+ version: 10
+ - name: Add NPM auth
+ run: |
+ echo "//registry.npmjs.org/:_authToken=${{secrets.NPM_TOKEN}}" >> ~/.npmrc
+ - name: Publish npm package with WASM files
+ working-directory: packages/sqlite3_wasm_build
+ run: |
+ pnpm i
+ npm version --allow-same-version --no-git-tag-version $(echo $GITHUB_REF_NAME | sed -E 's/powersync-v//')
+ pnpm publish --no-git-checks --access public
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
diff --git a/.github/workflows/scripts/copy-config.sh b/.github/workflows/scripts/copy-config.sh
index 21457486..f2c0a00d 100755
--- a/.github/workflows/scripts/copy-config.sh
+++ b/.github/workflows/scripts/copy-config.sh
@@ -19,6 +19,9 @@ copy_config_files() {
echo "Copied contents of $template_config to ${template_config%/*}/$TARGET_CONFIG_FILE"
fi
done
+
+ # Create a new file .env for supabase-trello demo
+ echo -n > demos/supabase-trello/.env
}
# Call the function for the single demos folder
diff --git a/.gitignore b/.gitignore
index 1baa751f..95fba1e8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,6 +9,8 @@ pubspec_overrides.yaml
.flutter-plugins-dependencies
.flutter-plugins
build
+**/doc/api
+.build
# Shared assets
assets/*
@@ -19,6 +21,7 @@ assets/*
powersync_db.worker.js
powersync_db.worker.js*
sqlite3.wasm
+sqlite3mc.wasm
powersync_sync.worker.js
powersync_sync.worker.js*
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c49add44..e76e3a6a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,744 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## 2025-10-06
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`powersync` - `v1.16.1`](#powersync---v1161)
+ - [`powersync_core` - `v1.6.1`](#powersync_core---v161)
+ - [`powersync_sqlcipher` - `v0.1.13`](#powersync_sqlcipher---v0113)
+
+---
+
+#### `powersync` - `v1.16.1`
+
+ - Web: Fix decoding sync streams on status.
+
+#### `powersync_core` - `v1.6.1`
+
+ - Web: Fix decoding sync streams on status.
+
+ - **DOCS**: Point to uses in example. ([4f4da24e](https://github.com/powersync-ja/powersync.dart/commit/4f4da24e580dec6b1d29a5e0907b83ba7c55e3d8))
+
+#### `powersync_sqlcipher` - `v0.1.13`
+
+ - Web: Fix decoding sync streams on status.
+
+
+## 2025-10-02
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`powersync_attachments_helper` - `v0.6.20`](#powersync_attachments_helper---v0620)
+ - [`powersync` - `v1.16.0`](#powersync---v1160)
+ - [`powersync_core` - `v1.6.0`](#powersync_core---v160)
+ - [`powersync_flutter_libs` - `v0.4.12`](#powersync_flutter_libs---v0412)
+ - [`powersync_sqlcipher` - `v0.1.12`](#powersync_sqlcipher---v0112)
+
+---
+
+#### `powersync_attachments_helper` - `v0.6.20`
+
+ - Add note about new attachment queue system in core package.
+
+#### `powersync` - `v1.16.0`
+#### `powersync_core` - `v1.6.0`
+#### `powersync_sqlcipher` - `v0.1.12`
+
+- Add `getCrudTransactions()` returning a stream of completed transactions for uploads.
+- Add experimental support for [sync streams](https://docs.powersync.com/usage/sync-streams).
+- Add new attachments helper implementation in `package:powersync_core/attachments/attachments.dart`.
+- Add SwiftPM support.
+- Add support for compiling `powersync_core` with `build_web_compilers`.
+
+#### `powersync_flutter_libs` - `v0.4.12`
+
+ - Update core extension.
+ - Add support for SwiftPM.
+
+## 2025-08-18
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`powersync_attachments_helper` - `v0.6.19`](#powersync_attachments_helper---v0619)
+
+---
+
+#### `powersync_attachments_helper` - `v0.6.19`
+
+ - Remove direct dependency on `sqlite_async`.
+
+
+## 2025-08-14
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`powersync_core` - `v1.5.2`](#powersync_core---v152)
+ - [`powersync` - `v1.15.2`](#powersync---v1152)
+ - [`powersync_sqlcipher` - `v0.1.11+1`](#powersync_sqlcipher---v01111)
+
+---
+
+#### `powersync_core` - `v1.5.2`
+
+ - Fix excessive memory consumption during large sync.
+
+#### `powersync` - `v1.15.2`
+
+ - Fix excessive memory consumption during large sync.
+
+#### `powersync_sqlcipher` - `v0.1.11+1`
+
+ - Fix excessive memory consumption during large sync.
+
+
+## 2025-08-11
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`powersync_core` - `v1.5.1`](#powersync_core---v151)
+ - [`powersync` - `v1.15.1`](#powersync---v1151)
+ - [`powersync_sqlcipher` - `v0.1.11`](#powersync_sqlcipher---v0111)
+ - [`powersync_flutter_libs` - `v0.4.11`](#powersync_flutter_libs---v0411)
+
+---
+
+#### `powersync_core` - `v1.5.1`
+#### `powersync` - `v1.15.1`
+#### `powersync_sqlcipher` - `v0.1.11`
+#### `powersync_flutter_libs` - `v0.4.11`
+
+ - Support latest versions of `package:sqlite3` and `package:sqlite_async`.
+ - Stream client: Improve `disconnect()` while a connection is being opened.
+ - Stream client: Support binary sync lines with Rust client and compatible PowerSync service versions.
+ - Sync client: Improve parsing error responses.
+
+## 2025-07-17
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`powersync_core` - `v1.5.0`](#powersync_core---v150)
+ - [`powersync` - `v1.15.0`](#powersync---v1150)
+ - [`powersync_sqlcipher` - `v0.1.10`](#powersync_sqlcipher---v0110)
+ - [`powersync_flutter_libs` - `v0.4.10`](#powersync_flutter_libs---v0410)
+ - [`powersync_attachments_helper` - `v0.6.18+11`](#powersync_attachments_helper---v061811)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `powersync_attachments_helper` - `v0.6.18+11`
+
+---
+
+#### `powersync_flutter_libs` - `v0.4.10`.
+
+ - Update the PowerSync core extension to `0.4.2`.
+
+#### `powersync_core` - `v1.5.0`
+#### `powersync` - `v1.15.0`
+#### `powersync_sqlcipher` - `v0.1.10`
+
+ - Add support for [raw tables](https://docs.powersync.com/usage/use-case-examples/raw-tables), which are user-managed
+ regular SQLite tables instead of the JSON-based views managed by PowerSync.
+
+
+## 2025-07-07
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`powersync_core` - `v1.4.1`](#powersync_core---v141)
+ - [`powersync` - `v1.14.1`](#powersync---v1141)
+ - [`powersync_sqlcipher` - `v0.1.9`](#powersync_sqlcipher---v019)
+ - [`powersync_attachments_helper` - `v0.6.18+10`](#powersync_attachments_helper---v061810)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `powersync_attachments_helper` - `v0.6.18+10`
+
+---
+
+#### `powersync_core` - `v1.4.1`
+#### `powersync` - `v1.14.1`
+#### `powersync_sqlcipher` - `v0.1.9`
+
+ - Rust client: Fix uploading local writes after reconnect.
+ - `PowerSyncDatabase.withDatabase`: Rename `loggers` parameter to `logger` for consistency.
+ - Fix parsing HTTP errors for sync service unavailability.
+
+## 2025-06-19
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`powersync_core` - `v1.4.0`](#powersync_core---v140)
+ - [`powersync` - `v1.14.0`](#powersync---v1140)
+ - [`powersync_sqlcipher` - `v0.1.8`](#powersync_sqlcipher---v018)
+ - [`powersync_attachments_helper` - `v0.6.18+9`](#powersync_attachments_helper---v06189)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `powersync_attachments_helper` - `v0.6.18+9`
+
+---
+
+#### `powersync_core` - `v1.4.0`
+
+#### `powersync` - `v1.14.0`
+
+#### `powersync_sqlcipher` - `v0.1.8`
+
+Add a new sync client implementation written in Rust instead of Dart. While
+this client is still experimental, we intend to make it the default in the
+future. The main benefit of this client is faster sync performance, but
+upcoming features will also require this client.
+We encourage interested users to try it out by passing `SyncOptions` to the
+`connect` method:
+
+```dart
+database.connect(
+ connector: YourConnector(),
+ options: const SyncOptions(
+ syncImplementation: SyncClientImplementation.rust,
+ ),
+);
+```
+
+Switching between the clients can be done at any time without compatibility
+issues. If you run into issues with the new client, please reach out to us!
+
+#### `powersync_flutter_libs` - `v0.4.9`
+
+ - Update PowerSync core extension to version 0.4.0.
+
+## 2025-05-29
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`powersync_core` - `v1.3.1`](#powersync_core---v131)
+ - [`powersync` - `v1.13.1`](#powersync---v1131)
+ - [`powersync_sqlcipher` - `v0.1.7`](#powersync_sqlcipher---v017)
+ - [`powersync_attachments_helper` - `v0.6.18+8`](#powersync_attachments_helper---v06188)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `powersync_attachments_helper` - `v0.6.18+8`
+
+---
+
+#### `powersync_core` - `v1.3.1`
+
+- Use `package:http` instead of `package:fetch_client` on the web (since the former now uses fetch as well).
+- Allow disconnecting in the credentials callback of a connector.
+- Deprecate retry and CRUD upload durations as fields and independent parameters. Use the new `SyncOptions` class instead.
+- Fix sync progress report after a compaction or defragmentation on the sync service.
+
+#### `powersync` - `v1.13.1`
+
+- Use `package:http` instead of `package:fetch_client` on the web (since the former now uses fetch as well).
+- Allow disconnecting in the credentials callback of a connector.
+- Deprecate retry and CRUD upload durations as fields and independent parameters. Use the new `SyncOptions` class instead.
+- Fix sync progress report after a compaction or defragmentation on the sync service.
+
+#### `powersync_sqlcipher` - `v0.1.7`
+
+ - Allow subclassing open factory for SQLCipher.
+
+
+## 2025-05-07
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`powersync_core` - `v1.3.0`](#powersync_core---v130)
+ - [`powersync` - `v1.13.0`](#powersync---v1130)
+ - [`powersync_sqlcipher` - `v0.1.6`](#powersync_sqlcipher---v016)
+ - [`powersync_flutter_libs` - `v0.4.8`](#powersync_flutter_libs---v048)
+ - [`powersync_attachments_helper` - `v0.6.18+7`](#powersync_attachments_helper---v06187)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `powersync_attachments_helper` - `v0.6.18+7`
+
+---
+
+#### `powersync_core` - `v1.3.0`
+#### `powersync` - `v1.13.0`
+#### `powersync_sqlcipher` - `v0.1.6`
+
+* Report real-time progress information about downloads through `SyncStatus.downloadProgress`.
+* Add `trackPreviousValues` option on `Table` which sets `CrudEntry.previousValues` to previous values on updates.
+* Add `trackMetadata` option on `Table` which adds a `_metadata` column that can be used for updates.
+ The configured metadata is available through `CrudEntry.metadata`.
+* Add `ignoreEmptyUpdates` option which skips creating CRUD entries for updates that don't change any values.
+
+#### `powersync_flutter_libs` - `v0.4.8`
+
+ - Update PowerSync core extension to version 0.3.14.
+
+
+## 2025-04-24
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`powersync_core` - `v1.2.4`](#powersync_core---v124)
+ - [`powersync_attachments_helper` - `v0.6.18+6`](#powersync_attachments_helper---v06186)
+ - [`powersync_sqlcipher` - `v0.1.5+4`](#powersync_sqlcipher---v0154)
+ - [`powersync` - `v1.12.4`](#powersync---v1124)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `powersync_attachments_helper` - `v0.6.18+6`
+ - `powersync_sqlcipher` - `v0.1.5+4`
+ - `powersync` - `v1.12.4`
+
+---
+
+#### `powersync_core` - `v1.2.4`
+
+ - Fix deadlock when `connect()` is called immediately after opening a database.
+
+
+## 2025-04-22
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`powersync_core` - `v1.2.3`](#powersync_core---v123)
+ - [`powersync_attachments_helper` - `v0.6.18+5`](#powersync_attachments_helper---v06185)
+ - [`powersync_sqlcipher` - `v0.1.5+3`](#powersync_sqlcipher---v0153)
+ - [`powersync` - `v1.12.3`](#powersync---v1123)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `powersync_attachments_helper` - `v0.6.18+5`
+ - `powersync_sqlcipher` - `v0.1.5+3`
+ - `powersync` - `v1.12.3`
+
+---
+
+#### `powersync_core` - `v1.2.3`
+
+ - Introduce locks to avoid duplicate sync streams when multiple instances of the same database are opened.
+ - Refactor connect / disconnect internally.
+ - Warn when multiple instances of the same database are opened.
+ - Fix race condition causing data not to be applied while an upload is in progress.
+ - Web: Fix token invalidation logic when a sync worker is used.
+
+
+## 2025-03-11
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`powersync_core` - `v1.2.2`](#powersync_core---v122)
+ - [`powersync_attachments_helper` - `v0.6.18+4`](#powersync_attachments_helper---v06184)
+ - [`powersync_sqlcipher` - `v0.1.5+2`](#powersync_sqlcipher---v0152)
+ - [`powersync` - `v1.12.2`](#powersync---v1122)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `powersync_attachments_helper` - `v0.6.18+4`
+ - `powersync_sqlcipher` - `v0.1.5+2`
+ - `powersync` - `v1.12.2`
+
+---
+
+#### `powersync_core` - `v1.2.2`
+
+ - Fix handling token invalidation on the web.
+
+
+## 2025-03-06
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`powersync_core` - `v1.2.1`](#powersync_core---v121)
+ - [`powersync_flutter_libs` - `v0.4.7`](#powersync_flutter_libs---v047)
+ - [`powersync_attachments_helper` - `v0.6.18+3`](#powersync_attachments_helper---v06183)
+ - [`powersync_sqlcipher` - `v0.1.5+1`](#powersync_sqlcipher---v0151)
+ - [`powersync` - `v1.12.1`](#powersync---v1121)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `powersync_attachments_helper` - `v0.6.18+3`
+ - `powersync_sqlcipher` - `v0.1.5+1`
+ - `powersync` - `v1.12.1`
+
+---
+
+#### `powersync_core` - `v1.2.1`
+
+ - Raise minimum version of core extension to 0.3.11.
+
+#### `powersync_flutter_libs` - `v0.4.7`
+
+ - Update core extension to 0.3.12.
+
+
+## 2025-03-03
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`powersync_core` - `v1.2.0`](#powersync_core---v120)
+ - [`powersync_flutter_libs` - `v0.4.6`](#powersync_flutter_libs---v046)
+ - [`powersync` - `v1.12.0`](#powersync---v1120)
+ - [`powersync_sqlcipher` - `v0.1.5`](#powersync_sqlcipher---v015)
+ - [`powersync_attachments_helper` - `v0.6.18+2`](#powersync_attachments_helper---v06182)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `powersync_attachments_helper` - `v0.6.18+2`
+
+---
+
+#### `powersync_core` - `v1.2.0`
+
+ - Support bucket priorities and partial syncs.
+
+#### `powersync_flutter_libs` - `v0.4.6`
+
+ - Bump version of core extension to 0.3.11
+
+#### `powersync` - `v1.12.0`
+
+ - Support bucket priorities and partial syncs.
+
+#### `powersync_sqlcipher` - `v0.1.5`
+
+ - Support bucket priorities and partial syncs.
+
+
+## 2025-02-17
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`powersync_core` - `v1.1.3`](#powersync_core---v113)
+ - [`powersync_flutter_libs` - `v0.4.5`](#powersync_flutter_libs---v045)
+ - [`powersync_attachments_helper` - `v0.6.18+1`](#powersync_attachments_helper---v06181)
+ - [`powersync_sqlcipher` - `v0.1.4+1`](#powersync_sqlcipher---v0141)
+ - [`powersync` - `v1.11.3`](#powersync---v1113)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `powersync_attachments_helper` - `v0.6.18+1`
+ - `powersync_sqlcipher` - `v0.1.4+1`
+ - `powersync` - `v1.11.3`
+
+---
+
+#### `powersync_core` - `v1.1.3`
+
+ - Add explicit casts in sync service, avoiding possible issues with dart2js optimizations.
+
+#### `powersync_flutter_libs` - `v0.4.5`
+
+ - Update core extension to 0.3.10 in preparation for bucket priorities.
+
+
+## 2025-01-28
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`powersync_core` - `v1.1.2`](#powersync_core---v112)
+ - [`powersync_attachments_helper` - `v0.6.18`](#powersync_attachments_helper---v0618)
+ - [`powersync_sqlcipher` - `v0.1.4`](#powersync_sqlcipher---v014)
+ - [`powersync` - `v1.11.2`](#powersync---v1112)
+
+Packages with dependency updates only:
+
+> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
+
+ - `powersync_attachments_helper` - `v0.6.18`
+ - `powersync_sqlcipher` - `v0.1.4`
+ - `powersync` - `v1.11.2`
+
+---
+
+#### `powersync_core` - `v1.1.2`
+
+ - Web: Support running in contexts where web workers are unavailable.
+ - Web: Fix sync worker logs not being disabled.
+ - `powersync_sqlcipher`: Web support.
+
+
+## 2025-01-16
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`powersync` - `v1.11.1`](#powersync---v1111)
+ - [`powersync_sqlcipher` - `v0.1.3`](#powersync_sqlcipher---v013)
+
+---
+
+#### `powersync` - `v1.11.1`
+
+ - Fix `statusStream` emitting the same sync status multiple times.
+
+#### `powersync_sqlcipher` - `v0.1.3`
+
+ - Fix `statusStream` emitting the same sync status multiple times.
+
+
+## 2025-01-06
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`powersync_sqlcipher` - `v0.1.2`](#powersync_sqlcipher---v012)
+ - [`powersync` - `v1.11.0`](#powersync---v1110)
+ - [`powersync_attachments_helper` - `v0.6.17`](#powersync_attachments_helper---v0617)
+ - [`powersync_core` - `v1.1.0`](#powersync_core---v110)
+ - [`powersync_flutter_libs` - `v0.4.4`](#powersync_flutter_libs---v044)
+
+---
+
+#### `powersync_sqlcipher` - `v0.1.2`
+
+#### `powersync` - `v1.11.0`
+
+ - Increase limit on number of columns per table to 1999.
+ - Avoid deleting the $local bucket on connect().
+
+#### `powersync_attachments_helper` - `v0.6.17`
+
+ - Update dependencies.
+
+#### `powersync_core` - `v1.1.0`
+
+ - Increase limit on number of columns per table to 1999.
+ - Avoid deleting the $local bucket on connect().
+
+#### `powersync_flutter_libs` - `v0.4.4`
+
+ - powersync-sqlite-core 0.3.8 - increases column limit and fixes view migration issue
+
+
+## 2024-11-13
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`powersync_sqlcipher` - `v0.1.1`](#powersync_sqlcipher---v011)
+
+---
+
+#### `powersync_sqlcipher` - `v0.1.1`
+
+ - Update dependency `powersync_flutter_libs` to v0.4.3
+
+
+## 2024-11-12
+
+### Changes
+
+---
+
+Packages with breaking changes:
+
+ - There are no breaking changes in this release.
+
+Packages with other changes:
+
+ - [`powersync` - `v1.10.0`](#powersync---v1100)
+ - [`powersync_attachments_helper` - `v0.6.16`](#powersync_attachments_helper---v0616)
+ - [`powersync_core` - `v1.0.0`](#powersync_core---v100)
+ - [`powersync_sqlcipher` - `v0.1.0`](#powersync_sqlcipher---v010)
+
+---
+
+#### `powersync` - `v1.10.0`
+
+ - This package now uses the `powersync_core` package to provide its base functionality.
+
+#### `powersync_attachments_helper` - `v0.6.16`
+
+ - Update a dependency to the latest release.
+
+#### `powersync_core` - `v1.0.0`
+
+ - Dart library for Powersync for use cases such as server-side Dart or non-Flutter Dart environments initial release.
+
+#### `powersync_sqlcipher` - `v0.1.0`
+
+ - PowerSync client SDK for Flutter with encryption enabled using SQLCipher initial release.
+
+
## 2024-11-11
### Changes
diff --git a/README.md b/README.md
index db1aa8a7..0f203caf 100644
--- a/README.md
+++ b/README.md
@@ -2,21 +2,23 @@
-*[PowerSync](https://www.powersync.com) is a sync engine for building local-first apps with instantly-responsive UI/UX and simplified state transfer. Syncs between SQLite on the client-side and Postgres, MongoDB or MySQL on the server-side.*
+_[PowerSync](https://www.powersync.com) is a sync engine for building local-first apps with instantly-responsive UI/UX and simplified state transfer. Syncs between SQLite on the client-side and Postgres, MongoDB or MySQL on the server-side._
-PowerSync SDK for Dart and Flutter
-===========
+# PowerSync SDK for Dart and Flutter
-| package | build | pub | likes | popularity | pub points |
-|----------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------| ------- | ------- |
-| [powersync](https://github.com/powersync-ja/powersync.dart/tree/master/packages/powersync) | [](https://github.com/powersync-ja/powersync.dart/actions?query=workflow%3Apackages) | [](https://pub.dev/packages/powersync) | [](https://pub.dev/packages/powersync/score) | [](https://pub.dev/packages/powersync/score) | [](https://pub.dev/packages/powersync/score)
-| [powersync_attachments_helper](https://github.com/powersync-ja/powersync.dart/tree/master/packages/powersync_attachments_helper) | [](https://github.com/powersync-ja/powersync.dart/actions?query=workflow%3Apackages) | [](https://pub.dev/packages/powersync_attachments_helper) | [](https://pub.dev/packages/powersync_attachments_helper/score) | [](https://pub.dev/packages/powersync_attachments_helper/score) | [](https://pub.dev/packages/powersync_attachments_helper/score)
+| package | build | pub | likes | pub points |
+|--------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------|
+| [powersync](https://github.com/powersync-ja/powersync.dart/tree/main/packages/powersync) | [](https://github.com/powersync-ja/powersync.dart/actions?query=workflow%3Apackages) | [](https://pub.dev/packages/powersync) | [](https://pub.dev/packages/powersync/score) | [](https://pub.dev/packages/powersync/score) |
+| [powersync_core](https://github.com/powersync-ja/powersync.dart/tree/main/packages/powersync_core) | [](https://github.com/powersync-ja/powersync.dart/actions?query=workflow%3Apackages) | [](https://pub.dev/packages/powersync_core) | [](https://pub.dev/packages/powersync_core/score) | [](https://pub.dev/packages/powersync_core/score) |
+| [powersync_sqlcipher](https://github.com/powersync-ja/powersync.dart/tree/main/packages/powersync_sqlcipher) | [](https://github.com/powersync-ja/powersync.dart/actions?query=workflow%3Apackages) | [](https://pub.dev/packages/powersync_sqlcipher) | [](https://pub.dev/packages/powersync_sqlcipher/score) | [](https://pub.dev/packages/powersync_sqlcipher/score) |
+| [powersync_attachments_helper](https://github.com/powersync-ja/powersync.dart/tree/main/packages/powersync_attachments_helper) | [](https://github.com/powersync-ja/powersync.dart/actions?query=workflow%3Apackages) | [](https://pub.dev/packages/powersync_attachments_helper) | [](https://pub.dev/packages/powersync_attachments_helper/score) | [](https://pub.dev/packages/powersync_attachments_helper/score) |
+| [powersync_flutter_libs](https://github.com/powersync-ja/powersync.dart/tree/main/packages/powersync_flutter_libs) | [](https://github.com/powersync-ja/powersync.dart/actions?query=workflow%3Apackages) | [](https://pub.dev/packages/powersync_flutter_libs) | [](https://pub.dev/packages/powersync_flutter_libs/score) | [](https://pub.dev/packages/powersync_flutter_libs/score) |
#### Usage
This monorepo uses [melos](https://melos.invertase.dev/) to handle command and package management.
-For detailed usage, check out the inner [powersync](https://github.com/powersync-ja/powersync.dart/tree/master/packages/powersync) and [attachments helper](https://github.com/powersync-ja/powersync.dart/tree/master/packages/powersync_attachments_helper) packages.
+For detailed usage, check out the inner [powersync](https://github.com/powersync-ja/powersync.dart/tree/main/packages/powersync), [powersync_core](https://github.com/powersync-ja/powersync.dart/tree/main/packages/powersync_core), [powersync_sqlcipher](https://github.com/powersync-ja/powersync.dart/tree/main/packages/powersync_sqlcipher) and [attachments helper](https://github.com/powersync-ja/powersync.dart/tree/main/packages/powersync_attachments_helper) packages.
To configure the monorepo for development run `melos prepare` after cloning
diff --git a/demos/benchmarks/.gitignore b/demos/benchmarks/.gitignore
index 1a825b5b..0f3655d3 100644
--- a/demos/benchmarks/.gitignore
+++ b/demos/benchmarks/.gitignore
@@ -5,9 +5,11 @@
*.swp
.DS_Store
.atom/
+.build/
.buildlog/
.history
.svn/
+.swiftpm/
migrate_working_dir/
# IntelliJ related
diff --git a/demos/benchmarks/ios/Flutter/Debug.xcconfig b/demos/benchmarks/ios/Flutter/Debug.xcconfig
index 592ceee8..ec97fc6f 100644
--- a/demos/benchmarks/ios/Flutter/Debug.xcconfig
+++ b/demos/benchmarks/ios/Flutter/Debug.xcconfig
@@ -1 +1,2 @@
+#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "Generated.xcconfig"
diff --git a/demos/benchmarks/ios/Flutter/Release.xcconfig b/demos/benchmarks/ios/Flutter/Release.xcconfig
index 592ceee8..c4855bfe 100644
--- a/demos/benchmarks/ios/Flutter/Release.xcconfig
+++ b/demos/benchmarks/ios/Flutter/Release.xcconfig
@@ -1 +1,2 @@
+#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "Generated.xcconfig"
diff --git a/demos/supabase-todolist-drift/ios/Podfile b/demos/benchmarks/ios/Podfile
similarity index 98%
rename from demos/supabase-todolist-drift/ios/Podfile
rename to demos/benchmarks/ios/Podfile
index d97f17e2..3e44f9c6 100644
--- a/demos/supabase-todolist-drift/ios/Podfile
+++ b/demos/benchmarks/ios/Podfile
@@ -1,5 +1,5 @@
# Uncomment this line to define a global platform for your project
-# platform :ios, '12.0'
+platform :ios, '13.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
diff --git a/demos/benchmarks/ios/Podfile.lock b/demos/benchmarks/ios/Podfile.lock
new file mode 100644
index 00000000..9d0fed8c
--- /dev/null
+++ b/demos/benchmarks/ios/Podfile.lock
@@ -0,0 +1,64 @@
+PODS:
+ - Flutter (1.0.0)
+ - path_provider_foundation (0.0.1):
+ - Flutter
+ - FlutterMacOS
+ - powersync-sqlite-core (0.4.5)
+ - powersync_flutter_libs (0.0.1):
+ - Flutter
+ - powersync-sqlite-core (~> 0.4.5)
+ - sqlite3 (3.49.2):
+ - sqlite3/common (= 3.49.2)
+ - sqlite3/common (3.49.2)
+ - sqlite3/dbstatvtab (3.49.2):
+ - sqlite3/common
+ - sqlite3/fts5 (3.49.2):
+ - sqlite3/common
+ - sqlite3/math (3.49.2):
+ - sqlite3/common
+ - sqlite3/perf-threadsafe (3.49.2):
+ - sqlite3/common
+ - sqlite3/rtree (3.49.2):
+ - sqlite3/common
+ - sqlite3_flutter_libs (0.0.1):
+ - Flutter
+ - FlutterMacOS
+ - sqlite3 (~> 3.49.1)
+ - sqlite3/dbstatvtab
+ - sqlite3/fts5
+ - sqlite3/math
+ - sqlite3/perf-threadsafe
+ - sqlite3/rtree
+
+DEPENDENCIES:
+ - Flutter (from `Flutter`)
+ - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
+ - powersync_flutter_libs (from `.symlinks/plugins/powersync_flutter_libs/ios`)
+ - sqlite3_flutter_libs (from `.symlinks/plugins/sqlite3_flutter_libs/darwin`)
+
+SPEC REPOS:
+ trunk:
+ - powersync-sqlite-core
+ - sqlite3
+
+EXTERNAL SOURCES:
+ Flutter:
+ :path: Flutter
+ path_provider_foundation:
+ :path: ".symlinks/plugins/path_provider_foundation/darwin"
+ powersync_flutter_libs:
+ :path: ".symlinks/plugins/powersync_flutter_libs/ios"
+ sqlite3_flutter_libs:
+ :path: ".symlinks/plugins/sqlite3_flutter_libs/darwin"
+
+SPEC CHECKSUMS:
+ Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467
+ path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
+ powersync-sqlite-core: 6f32860379009d2a37cadc9e9427a431bdbd83c8
+ powersync_flutter_libs: 7684a62208907328906eb932f1fc8b3d8879974e
+ sqlite3: 3c950dc86011117c307eb0b28c4a7bb449dce9f1
+ sqlite3_flutter_libs: f6acaa2172e6bb3e2e70c771661905080e8ebcf2
+
+PODFILE CHECKSUM: a57f30d18f102dd3ce366b1d62a55ecbef2158e5
+
+COCOAPODS: 1.16.2
diff --git a/demos/benchmarks/ios/Runner.xcodeproj/project.pbxproj b/demos/benchmarks/ios/Runner.xcodeproj/project.pbxproj
index cc46d302..cfbe4698 100644
--- a/demos/benchmarks/ios/Runner.xcodeproj/project.pbxproj
+++ b/demos/benchmarks/ios/Runner.xcodeproj/project.pbxproj
@@ -10,6 +10,8 @@
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
+ 55BE373CCF1ED6423F7C9F13 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D17B4AC493F667F33A6813D1 /* Pods_RunnerTests.framework */; };
+ 6A8AE5F30479FC94C3BB9A5F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B97B2AC19F853FF3853B5B33 /* Pods_Runner.framework */; };
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
@@ -42,9 +44,11 @@
/* Begin PBXFileReference section */
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; };
+ 1908EB9C1E3CC625229434C8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; };
331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; };
331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; };
+ 720A51B109D82B5D4BF97A08 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; };
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; };
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; };
@@ -55,19 +59,43 @@
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ AF9A1EC87465D4CBAC91D6D6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; };
+ B97B2AC19F853FF3853B5B33 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ C574CE2DA7DA60333EA773D8 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; };
+ D17B4AC493F667F33A6813D1 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ D9BAE173C885D5787C363140 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; };
+ EFDD574E630EAAEB09F77C18 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
+ 5D7C45551C3DD3F3DB7C2457 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 55BE373CCF1ED6423F7C9F13 /* Pods_RunnerTests.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
97C146EB1CF9000F007C117D /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ 6A8AE5F30479FC94C3BB9A5F /* Pods_Runner.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
+ 27D7B259814214C290142B81 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ B97B2AC19F853FF3853B5B33 /* Pods_Runner.framework */,
+ D17B4AC493F667F33A6813D1 /* Pods_RunnerTests.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
331C8082294A63A400263BE5 /* RunnerTests */ = {
isa = PBXGroup;
children = (
@@ -94,6 +122,8 @@
97C146F01CF9000F007C117D /* Runner */,
97C146EF1CF9000F007C117D /* Products */,
331C8082294A63A400263BE5 /* RunnerTests */,
+ A18EAFE14B4E966837146A32 /* Pods */,
+ 27D7B259814214C290142B81 /* Frameworks */,
);
sourceTree = "";
};
@@ -121,6 +151,20 @@
path = Runner;
sourceTree = "";
};
+ A18EAFE14B4E966837146A32 /* Pods */ = {
+ isa = PBXGroup;
+ children = (
+ 720A51B109D82B5D4BF97A08 /* Pods-Runner.debug.xcconfig */,
+ AF9A1EC87465D4CBAC91D6D6 /* Pods-Runner.release.xcconfig */,
+ 1908EB9C1E3CC625229434C8 /* Pods-Runner.profile.xcconfig */,
+ EFDD574E630EAAEB09F77C18 /* Pods-RunnerTests.debug.xcconfig */,
+ D9BAE173C885D5787C363140 /* Pods-RunnerTests.release.xcconfig */,
+ C574CE2DA7DA60333EA773D8 /* Pods-RunnerTests.profile.xcconfig */,
+ );
+ name = Pods;
+ path = Pods;
+ sourceTree = "";
+ };
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
@@ -128,8 +172,10 @@
isa = PBXNativeTarget;
buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
buildPhases = (
+ 61C5943B6BDAA164BA64B268 /* [CP] Check Pods Manifest.lock */,
331C807D294A63A400263BE5 /* Sources */,
331C807F294A63A400263BE5 /* Resources */,
+ 5D7C45551C3DD3F3DB7C2457 /* Frameworks */,
);
buildRules = (
);
@@ -145,12 +191,14 @@
isa = PBXNativeTarget;
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
+ 2D6D7232986C3A8199CBAED1 /* [CP] Check Pods Manifest.lock */,
9740EEB61CF901F6004384FC /* Run Script */,
97C146EA1CF9000F007C117D /* Sources */,
97C146EB1CF9000F007C117D /* Frameworks */,
97C146EC1CF9000F007C117D /* Resources */,
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
+ EFB7574570F19652665668DF /* [CP] Embed Pods Frameworks */,
);
buildRules = (
);
@@ -222,6 +270,28 @@
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
+ 2D6D7232986C3A8199CBAED1 /* [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-Runner-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;
+ };
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
@@ -238,6 +308,28 @@
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
};
+ 61C5943B6BDAA164BA64B268 /* [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-RunnerTests-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;
+ };
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
@@ -253,6 +345,23 @@
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
};
+ EFB7574570F19652665668DF /* [CP] Embed Pods Frameworks */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Embed Pods Frameworks";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
@@ -378,6 +487,7 @@
};
331C8088294A63A400263BE5 /* Debug */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = EFDD574E630EAAEB09F77C18 /* Pods-RunnerTests.debug.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
@@ -395,6 +505,7 @@
};
331C8089294A63A400263BE5 /* Release */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = D9BAE173C885D5787C363140 /* Pods-RunnerTests.release.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
@@ -410,6 +521,7 @@
};
331C808A294A63A400263BE5 /* Profile */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = C574CE2DA7DA60333EA773D8 /* Pods-RunnerTests.profile.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
diff --git a/demos/benchmarks/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/demos/benchmarks/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
index 8e3ca5df..15cada48 100644
--- a/demos/benchmarks/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
+++ b/demos/benchmarks/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -59,6 +59,7 @@
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
+ enableGPUValidationMode = "1"
allowLocationSimulation = "YES">
diff --git a/demos/benchmarks/ios/Runner.xcworkspace/contents.xcworkspacedata b/demos/benchmarks/ios/Runner.xcworkspace/contents.xcworkspacedata
index 1d526a16..21a3cc14 100644
--- a/demos/benchmarks/ios/Runner.xcworkspace/contents.xcworkspacedata
+++ b/demos/benchmarks/ios/Runner.xcworkspace/contents.xcworkspacedata
@@ -4,4 +4,7 @@
+
+
diff --git a/demos/benchmarks/ios/Runner/AppDelegate.swift b/demos/benchmarks/ios/Runner/AppDelegate.swift
index 9074fee9..62666446 100644
--- a/demos/benchmarks/ios/Runner/AppDelegate.swift
+++ b/demos/benchmarks/ios/Runner/AppDelegate.swift
@@ -1,7 +1,7 @@
import Flutter
import UIKit
-@UIApplicationMain
+@main
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
diff --git a/demos/benchmarks/lib/powersync.dart b/demos/benchmarks/lib/powersync.dart
index 8d5baa4d..df192ee0 100644
--- a/demos/benchmarks/lib/powersync.dart
+++ b/demos/benchmarks/lib/powersync.dart
@@ -88,13 +88,15 @@ Future getDatabasePath() async {
var currentConnector = BackendConnector();
+const options = SyncOptions(
+ params: {'size_bucket': AppConfig.sizeBucket},
+ crudThrottleTime: Duration(milliseconds: 1),
+);
+
Future resync() async {
await db.disconnectAndClear();
timer.start(db);
- db.connect(
- connector: currentConnector,
- params: {'size_bucket': AppConfig.sizeBucket},
- crudThrottleTime: const Duration(milliseconds: 1));
+ db.connect(connector: currentConnector, options: options);
}
Future openDatabase() async {
@@ -106,8 +108,5 @@ Future openDatabase() async {
BenchmarkItem.updateItemBenchmarks();
timer.start(db);
- db.connect(
- connector: currentConnector,
- params: {'size_bucket': AppConfig.sizeBucket},
- crudThrottleTime: const Duration(milliseconds: 1));
+ db.connect(connector: currentConnector, options: options);
}
diff --git a/demos/benchmarks/macos/Flutter/Flutter-Debug.xcconfig b/demos/benchmarks/macos/Flutter/Flutter-Debug.xcconfig
index c2efd0b6..4b81f9b2 100644
--- a/demos/benchmarks/macos/Flutter/Flutter-Debug.xcconfig
+++ b/demos/benchmarks/macos/Flutter/Flutter-Debug.xcconfig
@@ -1 +1,2 @@
+#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "ephemeral/Flutter-Generated.xcconfig"
diff --git a/demos/benchmarks/macos/Flutter/Flutter-Release.xcconfig b/demos/benchmarks/macos/Flutter/Flutter-Release.xcconfig
index c2efd0b6..5caa9d15 100644
--- a/demos/benchmarks/macos/Flutter/Flutter-Release.xcconfig
+++ b/demos/benchmarks/macos/Flutter/Flutter-Release.xcconfig
@@ -1 +1,2 @@
+#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "ephemeral/Flutter-Generated.xcconfig"
diff --git a/demos/supabase-todolist-drift/macos/Podfile b/demos/benchmarks/macos/Podfile
similarity index 98%
rename from demos/supabase-todolist-drift/macos/Podfile
rename to demos/benchmarks/macos/Podfile
index c795730d..b52666a1 100644
--- a/demos/supabase-todolist-drift/macos/Podfile
+++ b/demos/benchmarks/macos/Podfile
@@ -1,4 +1,4 @@
-platform :osx, '10.14'
+platform :osx, '10.15'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
diff --git a/demos/benchmarks/macos/Podfile.lock b/demos/benchmarks/macos/Podfile.lock
new file mode 100644
index 00000000..76db1f9b
--- /dev/null
+++ b/demos/benchmarks/macos/Podfile.lock
@@ -0,0 +1,64 @@
+PODS:
+ - FlutterMacOS (1.0.0)
+ - path_provider_foundation (0.0.1):
+ - Flutter
+ - FlutterMacOS
+ - powersync-sqlite-core (0.4.5)
+ - powersync_flutter_libs (0.0.1):
+ - FlutterMacOS
+ - powersync-sqlite-core (~> 0.4.5)
+ - sqlite3 (3.49.2):
+ - sqlite3/common (= 3.49.2)
+ - sqlite3/common (3.49.2)
+ - sqlite3/dbstatvtab (3.49.2):
+ - sqlite3/common
+ - sqlite3/fts5 (3.49.2):
+ - sqlite3/common
+ - sqlite3/math (3.49.2):
+ - sqlite3/common
+ - sqlite3/perf-threadsafe (3.49.2):
+ - sqlite3/common
+ - sqlite3/rtree (3.49.2):
+ - sqlite3/common
+ - sqlite3_flutter_libs (0.0.1):
+ - Flutter
+ - FlutterMacOS
+ - sqlite3 (~> 3.49.1)
+ - sqlite3/dbstatvtab
+ - sqlite3/fts5
+ - sqlite3/math
+ - sqlite3/perf-threadsafe
+ - sqlite3/rtree
+
+DEPENDENCIES:
+ - FlutterMacOS (from `Flutter/ephemeral`)
+ - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`)
+ - powersync_flutter_libs (from `Flutter/ephemeral/.symlinks/plugins/powersync_flutter_libs/macos`)
+ - sqlite3_flutter_libs (from `Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/darwin`)
+
+SPEC REPOS:
+ trunk:
+ - powersync-sqlite-core
+ - sqlite3
+
+EXTERNAL SOURCES:
+ FlutterMacOS:
+ :path: Flutter/ephemeral
+ path_provider_foundation:
+ :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin
+ powersync_flutter_libs:
+ :path: Flutter/ephemeral/.symlinks/plugins/powersync_flutter_libs/macos
+ sqlite3_flutter_libs:
+ :path: Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/darwin
+
+SPEC CHECKSUMS:
+ FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1
+ path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
+ powersync-sqlite-core: 6f32860379009d2a37cadc9e9427a431bdbd83c8
+ powersync_flutter_libs: 41d8a7b193abf15e46f95f0ec1229d86b6893171
+ sqlite3: 3c950dc86011117c307eb0b28c4a7bb449dce9f1
+ sqlite3_flutter_libs: f6acaa2172e6bb3e2e70c771661905080e8ebcf2
+
+PODFILE CHECKSUM: 9ebaf0ce3d369aaa26a9ea0e159195ed94724cf3
+
+COCOAPODS: 1.16.2
diff --git a/demos/benchmarks/macos/Runner.xcodeproj/project.pbxproj b/demos/benchmarks/macos/Runner.xcodeproj/project.pbxproj
index ffb0390c..960a5a58 100644
--- a/demos/benchmarks/macos/Runner.xcodeproj/project.pbxproj
+++ b/demos/benchmarks/macos/Runner.xcodeproj/project.pbxproj
@@ -27,6 +27,8 @@
33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; };
33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; };
33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; };
+ 9093F47C0B6EAD77C2B783DA /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8FCB7D15769DA95071391D1B /* Pods_Runner.framework */; };
+ A10E6A04FDE0D447F4342C4E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 65910ED980588B63D8A150F4 /* Pods_RunnerTests.framework */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -60,11 +62,12 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
+ 1464422B31F3DF1298E426C6 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; };
331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; };
333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; };
335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; };
- 33CC10ED2044A3C60003C045 /* benchmarks.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "benchmarks.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 33CC10ED2044A3C60003C045 /* benchmarks.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = benchmarks.app; sourceTree = BUILT_PRODUCTS_DIR; };
33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; };
33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; };
@@ -76,8 +79,15 @@
33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; };
33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; };
33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; };
+ 65910ED980588B63D8A150F4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; };
+ 87BDA74CA76A55849C7F34EF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; };
+ 8FCB7D15769DA95071391D1B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 95ED6FD4C60383CCCA983998 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; };
+ BC600AD1B46FC8B47BF4A584 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; };
+ DED1D204ED98DCE172D8FD06 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; };
+ F90CD46D97CB5DFA79A60335 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -85,6 +95,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ A10E6A04FDE0D447F4342C4E /* Pods_RunnerTests.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -92,6 +103,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ 9093F47C0B6EAD77C2B783DA /* Pods_Runner.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -125,6 +137,7 @@
331C80D6294CF71000263BE5 /* RunnerTests */,
33CC10EE2044A3C60003C045 /* Products */,
D73912EC22F37F3D000D13A0 /* Frameworks */,
+ 83FD9C0045A6BE42E567DFFF /* Pods */,
);
sourceTree = "";
};
@@ -172,9 +185,25 @@
path = Runner;
sourceTree = "";
};
+ 83FD9C0045A6BE42E567DFFF /* Pods */ = {
+ isa = PBXGroup;
+ children = (
+ BC600AD1B46FC8B47BF4A584 /* Pods-Runner.debug.xcconfig */,
+ 95ED6FD4C60383CCCA983998 /* Pods-Runner.release.xcconfig */,
+ F90CD46D97CB5DFA79A60335 /* Pods-Runner.profile.xcconfig */,
+ 1464422B31F3DF1298E426C6 /* Pods-RunnerTests.debug.xcconfig */,
+ 87BDA74CA76A55849C7F34EF /* Pods-RunnerTests.release.xcconfig */,
+ DED1D204ED98DCE172D8FD06 /* Pods-RunnerTests.profile.xcconfig */,
+ );
+ name = Pods;
+ path = Pods;
+ sourceTree = "";
+ };
D73912EC22F37F3D000D13A0 /* Frameworks */ = {
isa = PBXGroup;
children = (
+ 8FCB7D15769DA95071391D1B /* Pods_Runner.framework */,
+ 65910ED980588B63D8A150F4 /* Pods_RunnerTests.framework */,
);
name = Frameworks;
sourceTree = "";
@@ -186,6 +215,7 @@
isa = PBXNativeTarget;
buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
buildPhases = (
+ C4E73F96DDA098F470016E9F /* [CP] Check Pods Manifest.lock */,
331C80D1294CF70F00263BE5 /* Sources */,
331C80D2294CF70F00263BE5 /* Frameworks */,
331C80D3294CF70F00263BE5 /* Resources */,
@@ -204,11 +234,13 @@
isa = PBXNativeTarget;
buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
+ 294F0AD87F4F87D46586033D /* [CP] Check Pods Manifest.lock */,
33CC10E92044A3C60003C045 /* Sources */,
33CC10EA2044A3C60003C045 /* Frameworks */,
33CC10EB2044A3C60003C045 /* Resources */,
33CC110E2044A8840003C045 /* Bundle Framework */,
3399D490228B24CF009A79C7 /* ShellScript */,
+ 2552B7F32AADACDD56A1879C /* [CP] Embed Pods Frameworks */,
);
buildRules = (
);
@@ -291,6 +323,45 @@
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
+ 2552B7F32AADACDD56A1879C /* [CP] Embed Pods Frameworks */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Embed Pods Frameworks";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 294F0AD87F4F87D46586033D /* [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-Runner-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;
+ };
3399D490228B24CF009A79C7 /* ShellScript */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
@@ -329,6 +400,28 @@
shellPath = /bin/sh;
shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire";
};
+ C4E73F96DDA098F470016E9F /* [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-RunnerTests-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;
+ };
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
@@ -380,6 +473,7 @@
/* Begin XCBuildConfiguration section */
331C80DB294CF71000263BE5 /* Debug */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = 1464422B31F3DF1298E426C6 /* Pods-RunnerTests.debug.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CURRENT_PROJECT_VERSION = 1;
@@ -394,6 +488,7 @@
};
331C80DC294CF71000263BE5 /* Release */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = 87BDA74CA76A55849C7F34EF /* Pods-RunnerTests.release.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CURRENT_PROJECT_VERSION = 1;
@@ -408,6 +503,7 @@
};
331C80DD294CF71000263BE5 /* Profile */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = DED1D204ED98DCE172D8FD06 /* Pods-RunnerTests.profile.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CURRENT_PROJECT_VERSION = 1;
diff --git a/demos/benchmarks/macos/Runner.xcworkspace/contents.xcworkspacedata b/demos/benchmarks/macos/Runner.xcworkspace/contents.xcworkspacedata
index 1d526a16..21a3cc14 100644
--- a/demos/benchmarks/macos/Runner.xcworkspace/contents.xcworkspacedata
+++ b/demos/benchmarks/macos/Runner.xcworkspace/contents.xcworkspacedata
@@ -4,4 +4,7 @@
+
+
diff --git a/demos/benchmarks/pubspec.lock b/demos/benchmarks/pubspec.lock
index 687f1f3c..b45942df 100644
--- a/demos/benchmarks/pubspec.lock
+++ b/demos/benchmarks/pubspec.lock
@@ -5,34 +5,34 @@ packages:
dependency: transitive
description:
name: args
- sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a"
+ sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
url: "https://pub.dev"
source: hosted
- version: "2.5.0"
+ version: "2.7.0"
async:
dependency: transitive
description:
name: async
- sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
+ sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb"
url: "https://pub.dev"
source: hosted
- version: "2.11.0"
+ version: "2.13.0"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
- sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
+ sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
url: "https://pub.dev"
source: hosted
- version: "2.1.1"
+ version: "2.1.2"
characters:
dependency: transitive
description:
name: characters
- sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
+ sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
url: "https://pub.dev"
source: hosted
- version: "1.3.0"
+ version: "1.4.0"
checked_yaml:
dependency: transitive
description:
@@ -45,66 +45,50 @@ packages:
dependency: transitive
description:
name: clock
- sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
+ sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
url: "https://pub.dev"
source: hosted
- version: "1.1.1"
+ version: "1.1.2"
collection:
dependency: transitive
description:
name: collection
- sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
+ sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
url: "https://pub.dev"
source: hosted
- version: "1.18.0"
+ version: "1.19.1"
crypto:
dependency: transitive
description:
name: crypto
- sha256: ec30d999af904f33454ba22ed9a86162b35e52b44ac4807d1d93c288041d7d27
+ sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855"
url: "https://pub.dev"
source: hosted
- version: "3.0.5"
+ version: "3.0.6"
fake_async:
dependency: transitive
description:
name: fake_async
- sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
+ sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
url: "https://pub.dev"
source: hosted
- version: "1.3.1"
- fetch_api:
- dependency: transitive
- description:
- name: fetch_api
- sha256: "97f46c25b480aad74f7cc2ad7ccba2c5c6f08d008e68f95c1077286ce243d0e6"
- url: "https://pub.dev"
- source: hosted
- version: "2.2.0"
- fetch_client:
- dependency: transitive
- description:
- name: fetch_client
- sha256: "9666ee14536778474072245ed5cba07db81ae8eb5de3b7bf4a2d1e2c49696092"
- url: "https://pub.dev"
- source: hosted
- version: "1.1.2"
+ version: "1.3.3"
ffi:
dependency: transitive
description:
name: ffi
- sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6"
+ sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418"
url: "https://pub.dev"
source: hosted
- version: "2.1.3"
+ version: "2.1.4"
fixnum:
dependency: transitive
description:
name: fixnum
- sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1"
+ sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be
url: "https://pub.dev"
source: hosted
- version: "1.1.0"
+ version: "1.1.1"
flutter:
dependency: "direct main"
description: flutter
@@ -127,26 +111,18 @@ packages:
dependency: "direct main"
description:
name: http
- sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010
+ sha256: bb2ce4590bc2667c96f318d68cac1b5a7987ec819351d32b1c987239a815e007
url: "https://pub.dev"
source: hosted
- version: "1.2.2"
+ version: "1.5.0"
http_parser:
dependency: transitive
description:
name: http_parser
- sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b"
+ sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
url: "https://pub.dev"
source: hosted
- version: "4.0.2"
- js:
- dependency: transitive
- description:
- name: js
- sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf
- url: "https://pub.dev"
- source: hosted
- version: "0.7.1"
+ version: "4.1.2"
json_annotation:
dependency: transitive
description:
@@ -159,26 +135,26 @@ packages:
dependency: transitive
description:
name: leak_tracker
- sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05"
+ sha256: "8dcda04c3fc16c14f48a7bb586d4be1f0d1572731b6d81d51772ef47c02081e0"
url: "https://pub.dev"
source: hosted
- version: "10.0.5"
+ version: "11.0.1"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
- sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806"
+ sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
url: "https://pub.dev"
source: hosted
- version: "3.0.5"
+ version: "3.0.10"
leak_tracker_testing:
dependency: transitive
description:
name: leak_tracker_testing
- sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
+ sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
url: "https://pub.dev"
source: hosted
- version: "3.0.1"
+ version: "3.0.2"
lints:
dependency: transitive
description:
@@ -191,18 +167,18 @@ packages:
dependency: "direct main"
description:
name: logging
- sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340"
+ sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
url: "https://pub.dev"
source: hosted
- version: "1.2.0"
+ version: "1.3.0"
matcher:
dependency: transitive
description:
name: matcher
- sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
+ sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
url: "https://pub.dev"
source: hosted
- version: "0.12.16+1"
+ version: "0.12.17"
material_color_utilities:
dependency: transitive
description:
@@ -215,10 +191,10 @@ packages:
dependency: transitive
description:
name: meta
- sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
+ sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
url: "https://pub.dev"
source: hosted
- version: "1.15.0"
+ version: "1.16.0"
mutex:
dependency: transitive
description:
@@ -231,34 +207,34 @@ packages:
dependency: "direct main"
description:
name: path
- sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
+ sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
url: "https://pub.dev"
source: hosted
- version: "1.9.0"
+ version: "1.9.1"
path_provider:
dependency: "direct main"
description:
name: path_provider
- sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378
+ sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd"
url: "https://pub.dev"
source: hosted
- version: "2.1.4"
+ version: "2.1.5"
path_provider_android:
dependency: transitive
description:
name: path_provider_android
- sha256: "6f01f8e37ec30b07bc424b4deabac37cacb1bc7e2e515ad74486039918a37eb7"
+ sha256: d0d310befe2c8ab9e7f393288ccbb11b60c019c6b5afc21973eeee4dda2b35e9
url: "https://pub.dev"
source: hosted
- version: "2.2.10"
+ version: "2.2.17"
path_provider_foundation:
dependency: transitive
description:
name: path_provider_foundation
- sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16
+ sha256: "4843174df4d288f5e29185bd6e72a6fbdf5a4a4602717eed565497429f179942"
url: "https://pub.dev"
source: hosted
- version: "2.4.0"
+ version: "2.4.1"
path_provider_linux:
dependency: transitive
description:
@@ -287,10 +263,10 @@ packages:
dependency: transitive
description:
name: platform
- sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65"
+ sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984"
url: "https://pub.dev"
source: hosted
- version: "3.1.5"
+ version: "3.1.6"
plugin_platform_interface:
dependency: transitive
description:
@@ -305,43 +281,50 @@ packages:
path: "../../packages/powersync"
relative: true
source: path
- version: "1.9.2"
+ version: "1.15.2"
+ powersync_core:
+ dependency: "direct overridden"
+ description:
+ path: "../../packages/powersync_core"
+ relative: true
+ source: path
+ version: "1.5.2"
powersync_flutter_libs:
dependency: "direct overridden"
description:
path: "../../packages/powersync_flutter_libs"
relative: true
source: path
- version: "0.4.2"
+ version: "0.4.11"
pub_semver:
dependency: transitive
description:
name: pub_semver
- sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c"
+ sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585"
url: "https://pub.dev"
source: hosted
- version: "2.1.4"
+ version: "2.2.0"
pubspec_parse:
dependency: transitive
description:
name: pubspec_parse
- sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8
+ sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082"
url: "https://pub.dev"
source: hosted
- version: "1.3.0"
+ version: "1.5.0"
sky_engine:
dependency: transitive
description: flutter
source: sdk
- version: "0.0.99"
+ version: "0.0.0"
source_span:
dependency: transitive
description:
name: source_span
- sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
+ sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
url: "https://pub.dev"
source: hosted
- version: "1.10.0"
+ version: "1.10.1"
sprintf:
dependency: transitive
description:
@@ -354,82 +337,82 @@ packages:
dependency: transitive
description:
name: sqlite3
- sha256: bb174b3ec2527f9c5f680f73a89af8149dd99782fbb56ea88ad0807c5638f2ed
+ sha256: f393d92c71bdcc118d6203d07c991b9be0f84b1a6f89dd4f7eed348131329924
url: "https://pub.dev"
source: hosted
- version: "2.4.7"
+ version: "2.9.0"
sqlite3_flutter_libs:
dependency: transitive
description:
name: sqlite3_flutter_libs
- sha256: "62bbb4073edbcdf53f40c80775f33eea01d301b7b81417e5b3fb7395416258c1"
+ sha256: "1a96b59227828d9eb1463191d684b37a27d66ee5ed7597fcf42eee6452c88a14"
url: "https://pub.dev"
source: hosted
- version: "0.5.24"
+ version: "0.5.32"
sqlite3_web:
dependency: transitive
description:
name: sqlite3_web
- sha256: f22d1dda7a40be0867984f55cdf5c2d599e5f05d3be4a642d78f38b38983f554
+ sha256: "0f6ebcb4992d1892ac5c8b5ecd22a458ab9c5eb6428b11ae5ecb5d63545844da"
url: "https://pub.dev"
source: hosted
- version: "0.2.0"
+ version: "0.3.2"
sqlite_async:
dependency: "direct main"
description:
name: sqlite_async
- sha256: d66fb6e6d07c1a834743326c033029f75becbb1fad6823d709f921872abc3d5b
+ sha256: "6116bfc6aef6ce77730b478385ba4a58873df45721f6a9bc6ffabf39b6576e36"
url: "https://pub.dev"
source: hosted
- version: "0.11.0"
+ version: "0.12.1"
stack_trace:
dependency: transitive
description:
name: stack_trace
- sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
+ sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
url: "https://pub.dev"
source: hosted
- version: "1.11.1"
+ version: "1.12.1"
stream_channel:
dependency: transitive
description:
name: stream_channel
- sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
+ sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
url: "https://pub.dev"
source: hosted
- version: "2.1.2"
+ version: "2.1.4"
string_scanner:
dependency: transitive
description:
name: string_scanner
- sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
+ sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
url: "https://pub.dev"
source: hosted
- version: "1.2.0"
+ version: "1.4.1"
term_glyph:
dependency: transitive
description:
name: term_glyph
- sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
+ sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
url: "https://pub.dev"
source: hosted
- version: "1.2.1"
+ version: "1.2.2"
test_api:
dependency: transitive
description:
name: test_api
- sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb"
+ sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00"
url: "https://pub.dev"
source: hosted
- version: "0.7.2"
+ version: "0.7.6"
typed_data:
dependency: transitive
description:
name: typed_data
- sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c
+ sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
url: "https://pub.dev"
source: hosted
- version: "1.3.2"
+ version: "1.4.0"
universal_io:
dependency: "direct main"
description:
@@ -442,50 +425,50 @@ packages:
dependency: transitive
description:
name: uuid
- sha256: "83d37c7ad7aaf9aa8e275490669535c8080377cfa7a7004c24dfac53afffaa90"
+ sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff
url: "https://pub.dev"
source: hosted
- version: "4.4.2"
+ version: "4.5.1"
vector_math:
dependency: transitive
description:
name: vector_math
- sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
+ sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
url: "https://pub.dev"
source: hosted
- version: "2.1.4"
+ version: "2.2.0"
vm_service:
dependency: transitive
description:
name: vm_service
- sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d"
+ sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02
url: "https://pub.dev"
source: hosted
- version: "14.2.5"
+ version: "15.0.0"
web:
dependency: transitive
description:
name: web
- sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb
+ sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
url: "https://pub.dev"
source: hosted
- version: "1.1.0"
+ version: "1.1.1"
xdg_directories:
dependency: transitive
description:
name: xdg_directories
- sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d
+ sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15"
url: "https://pub.dev"
source: hosted
- version: "1.0.4"
+ version: "1.1.0"
yaml:
dependency: transitive
description:
name: yaml
- sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5"
+ sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
url: "https://pub.dev"
source: hosted
- version: "3.1.2"
+ version: "3.1.3"
sdks:
- dart: ">=3.4.0 <4.0.0"
- flutter: ">=3.22.0"
+ dart: ">=3.8.0-0 <4.0.0"
+ flutter: ">=3.27.0"
diff --git a/demos/benchmarks/pubspec.yaml b/demos/benchmarks/pubspec.yaml
index 8e360c04..aea63c20 100644
--- a/demos/benchmarks/pubspec.yaml
+++ b/demos/benchmarks/pubspec.yaml
@@ -10,12 +10,12 @@ environment:
dependencies:
flutter:
sdk: flutter
- powersync: ^1.9.3
+ powersync: ^1.16.1
path_provider: ^2.1.1
path: ^1.8.3
logging: ^1.2.0
universal_io: ^2.2.2
- sqlite_async: ^0.11.0
+ sqlite_async: ^0.12.0
http: ^1.2.2
dev_dependencies:
diff --git a/demos/django-todolist/.gitignore b/demos/django-todolist/.gitignore
index 0b04140a..777f9a68 100644
--- a/demos/django-todolist/.gitignore
+++ b/demos/django-todolist/.gitignore
@@ -5,9 +5,11 @@
*.swp
.DS_Store
.atom/
+.build/
.buildlog/
.history
.svn/
+.swiftpm/
migrate_working_dir/
# IntelliJ related
diff --git a/demos/django-todolist/ios/Podfile b/demos/django-todolist/ios/Podfile
index e9f73048..2c1e086a 100644
--- a/demos/django-todolist/ios/Podfile
+++ b/demos/django-todolist/ios/Podfile
@@ -1,5 +1,5 @@
# Uncomment this line to define a global platform for your project
-platform :ios, '12.0'
+platform :ios, '13.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
diff --git a/demos/django-todolist/ios/Podfile.lock b/demos/django-todolist/ios/Podfile.lock
index c47483fd..8bfa9ae3 100644
--- a/demos/django-todolist/ios/Podfile.lock
+++ b/demos/django-todolist/ios/Podfile.lock
@@ -3,29 +3,33 @@ PODS:
- path_provider_foundation (0.0.1):
- Flutter
- FlutterMacOS
- - powersync-sqlite-core (0.3.0)
+ - powersync-sqlite-core (0.4.5)
- powersync_flutter_libs (0.0.1):
- Flutter
- - powersync-sqlite-core (~> 0.3.0)
+ - powersync-sqlite-core (~> 0.4.5)
- shared_preferences_foundation (0.0.1):
- Flutter
- FlutterMacOS
- - "sqlite3 (3.46.1+1)":
- - "sqlite3/common (= 3.46.1+1)"
- - "sqlite3/common (3.46.1+1)"
- - "sqlite3/dbstatvtab (3.46.1+1)":
+ - sqlite3 (3.49.2):
+ - sqlite3/common (= 3.49.2)
+ - sqlite3/common (3.49.2)
+ - sqlite3/dbstatvtab (3.49.2):
- sqlite3/common
- - "sqlite3/fts5 (3.46.1+1)":
+ - sqlite3/fts5 (3.49.2):
- sqlite3/common
- - "sqlite3/perf-threadsafe (3.46.1+1)":
+ - sqlite3/math (3.49.2):
- sqlite3/common
- - "sqlite3/rtree (3.46.1+1)":
+ - sqlite3/perf-threadsafe (3.49.2):
+ - sqlite3/common
+ - sqlite3/rtree (3.49.2):
- sqlite3/common
- sqlite3_flutter_libs (0.0.1):
- Flutter
- - "sqlite3 (~> 3.46.0+1)"
+ - FlutterMacOS
+ - sqlite3 (~> 3.49.1)
- sqlite3/dbstatvtab
- sqlite3/fts5
+ - sqlite3/math
- sqlite3/perf-threadsafe
- sqlite3/rtree
@@ -34,7 +38,7 @@ DEPENDENCIES:
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
- powersync_flutter_libs (from `.symlinks/plugins/powersync_flutter_libs/ios`)
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
- - sqlite3_flutter_libs (from `.symlinks/plugins/sqlite3_flutter_libs/ios`)
+ - sqlite3_flutter_libs (from `.symlinks/plugins/sqlite3_flutter_libs/darwin`)
SPEC REPOS:
trunk:
@@ -51,17 +55,17 @@ EXTERNAL SOURCES:
shared_preferences_foundation:
:path: ".symlinks/plugins/shared_preferences_foundation/darwin"
sqlite3_flutter_libs:
- :path: ".symlinks/plugins/sqlite3_flutter_libs/ios"
+ :path: ".symlinks/plugins/sqlite3_flutter_libs/darwin"
SPEC CHECKSUMS:
- Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
- path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
- powersync-sqlite-core: ad0e70e23bacd858fe2e79032dc4aabdf972d1bd
- powersync_flutter_libs: 064c44b51fb07df9486b735fb96ab7608a89e18b
- shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78
- sqlite3: 0bb0e6389d824e40296f531b858a2a0b71c0d2fb
- sqlite3_flutter_libs: c00457ebd31e59fa6bb830380ddba24d44fbcd3b
+ Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467
+ path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
+ powersync-sqlite-core: 6f32860379009d2a37cadc9e9427a431bdbd83c8
+ powersync_flutter_libs: 7684a62208907328906eb932f1fc8b3d8879974e
+ shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
+ sqlite3: 3c950dc86011117c307eb0b28c4a7bb449dce9f1
+ sqlite3_flutter_libs: f6acaa2172e6bb3e2e70c771661905080e8ebcf2
-PODFILE CHECKSUM: f7b3cb7384a2d5da4b22b090e1f632de7f377987
+PODFILE CHECKSUM: 2c1730c97ea13f1ea48b32e9c79de785b4f2f02f
-COCOAPODS: 1.15.2
+COCOAPODS: 1.16.2
diff --git a/demos/django-todolist/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/demos/django-todolist/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
index 5e31d3d3..c53e2b31 100644
--- a/demos/django-todolist/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
+++ b/demos/django-todolist/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -48,6 +48,7 @@
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
+ enableGPUValidationMode = "1"
allowLocationSimulation = "YES">
diff --git a/demos/django-todolist/ios/Runner/AppDelegate.swift b/demos/django-todolist/ios/Runner/AppDelegate.swift
index 70693e4a..b6363034 100644
--- a/demos/django-todolist/ios/Runner/AppDelegate.swift
+++ b/demos/django-todolist/ios/Runner/AppDelegate.swift
@@ -1,7 +1,7 @@
import UIKit
import Flutter
-@UIApplicationMain
+@main
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
diff --git a/demos/django-todolist/lib/main.dart b/demos/django-todolist/lib/main.dart
index 5fad8f77..f053b806 100644
--- a/demos/django-todolist/lib/main.dart
+++ b/demos/django-todolist/lib/main.dart
@@ -41,7 +41,7 @@ const listsPage = ListsPage();
const homePage = listsPage;
const sqlConsolePage = Scaffold(
- appBar: StatusAppBar(title: 'SQL Console'),
+ appBar: StatusAppBar(title: Text('SQL Console')),
body: QueryWidget(defaultQuery: defaultQuery));
const loginPage = LoginPage();
@@ -76,7 +76,7 @@ class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
- appBar: StatusAppBar(title: title),
+ appBar: StatusAppBar(title: Text(title)),
body: Center(child: content),
floatingActionButton: floatingActionButton,
drawer: Drawer(
diff --git a/demos/django-todolist/lib/widgets/guard_by_sync.dart b/demos/django-todolist/lib/widgets/guard_by_sync.dart
new file mode 100644
index 00000000..b65986b0
--- /dev/null
+++ b/demos/django-todolist/lib/widgets/guard_by_sync.dart
@@ -0,0 +1,53 @@
+import 'package:flutter/material.dart';
+import 'package:powersync/powersync.dart' hide Column;
+import 'package:powersync_django_todolist_demo/powersync.dart';
+
+/// A widget that shows [child] after a complete sync on the database has
+/// completed and a progress bar before that.
+class GuardBySync extends StatelessWidget {
+ final Widget child;
+
+ /// When set, wait only for a complete sync within the [StreamPriority]
+ /// instead of a full sync.
+ final StreamPriority? priority;
+
+ const GuardBySync({
+ super.key,
+ required this.child,
+ this.priority,
+ });
+
+ @override
+ Widget build(BuildContext context) {
+ return StreamBuilder(
+ stream: db.statusStream,
+ initialData: db.currentStatus,
+ builder: (context, snapshot) {
+ final status = snapshot.requireData;
+ final (didSync, progress) = switch (priority) {
+ null => (status.hasSynced ?? false, status.downloadProgress),
+ var priority? => (
+ status.statusForPriority(priority).hasSynced ?? false,
+ status.downloadProgress?.untilPriority(priority)
+ ),
+ };
+
+ if (didSync) {
+ return child;
+ } else {
+ return Center(
+ child: Column(
+ children: [
+ const Text('Busy with sync...'),
+ LinearProgressIndicator(value: progress?.downloadedFraction),
+ if (progress case final progress?)
+ Text(
+ '${progress.downloadedOperations} out of ${progress.totalOperations}')
+ ],
+ ),
+ );
+ }
+ },
+ );
+ }
+}
diff --git a/demos/django-todolist/lib/widgets/lists_page.dart b/demos/django-todolist/lib/widgets/lists_page.dart
index e31c2fc8..f60f158b 100644
--- a/demos/django-todolist/lib/widgets/lists_page.dart
+++ b/demos/django-todolist/lib/widgets/lists_page.dart
@@ -1,11 +1,10 @@
-import 'dart:async';
-
import 'package:flutter/material.dart';
import './list_item.dart';
import './list_item_dialog.dart';
import '../main.dart';
import '../models/todo_list.dart';
+import 'guard_by_sync.dart';
void _showAddDialog(BuildContext context) async {
return showDialog(
@@ -41,48 +40,27 @@ class ListsPage extends StatelessWidget {
}
}
-class ListsWidget extends StatefulWidget {
+final class ListsWidget extends StatelessWidget {
const ListsWidget({super.key});
- @override
- State createState() {
- return _ListsWidgetState();
- }
-}
-
-class _ListsWidgetState extends State {
- List _data = [];
- StreamSubscription? _subscription;
-
- _ListsWidgetState();
-
- @override
- void initState() {
- super.initState();
- final stream = TodoList.watchListsWithStats();
- _subscription = stream.listen((data) {
- if (!context.mounted) {
- return;
- }
- setState(() {
- _data = data;
- });
- });
- }
-
- @override
- void dispose() {
- super.dispose();
- _subscription?.cancel();
- }
-
@override
Widget build(BuildContext context) {
- return ListView(
- padding: const EdgeInsets.symmetric(vertical: 8.0),
- children: _data.map((list) {
- return ListItemWidget(list: list);
- }).toList(),
+ return GuardBySync(
+ child: StreamBuilder(
+ stream: TodoList.watchListsWithStats(),
+ builder: (context, snapshot) {
+ if (snapshot.data case final todoLists?) {
+ return ListView(
+ padding: const EdgeInsets.symmetric(vertical: 8.0),
+ children: todoLists.map((list) {
+ return ListItemWidget(list: list);
+ }).toList(),
+ );
+ } else {
+ return const CircularProgressIndicator();
+ }
+ },
+ ),
);
}
}
diff --git a/demos/django-todolist/lib/widgets/status_app_bar.dart b/demos/django-todolist/lib/widgets/status_app_bar.dart
index 90d18ae8..9011303e 100644
--- a/demos/django-todolist/lib/widgets/status_app_bar.dart
+++ b/demos/django-todolist/lib/widgets/status_app_bar.dart
@@ -1,62 +1,42 @@
-import 'dart:async';
-
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:powersync/powersync.dart';
import 'package:powersync_django_todolist_demo/widgets/fts_search_delegate.dart';
import '../powersync.dart';
-class StatusAppBar extends StatefulWidget implements PreferredSizeWidget {
- const StatusAppBar({super.key, required this.title});
-
- final String title;
+class StatusAppBar extends StatelessWidget implements PreferredSizeWidget {
+ final Widget title;
- @override
- State createState() => _StatusAppBarState();
+ const StatusAppBar({super.key, required this.title});
@override
Size get preferredSize => const Size.fromHeight(kToolbarHeight);
-}
-
-class _StatusAppBarState extends State {
- late SyncStatus _connectionState;
- StreamSubscription? _syncStatusSubscription;
-
- @override
- void initState() {
- super.initState();
- _connectionState = db.currentStatus;
- _syncStatusSubscription = db.statusStream.listen((event) {
- setState(() {
- _connectionState = db.currentStatus;
- });
- });
- }
-
- @override
- void dispose() {
- super.dispose();
- _syncStatusSubscription?.cancel();
- }
@override
Widget build(BuildContext context) {
- final statusIcon = _getStatusIcon(_connectionState);
+ return StreamBuilder(
+ stream: db.statusStream,
+ initialData: db.currentStatus,
+ builder: (context, snapshot) {
+ final status = snapshot.data!;
+ final statusIcon = _getStatusIcon(status);
- return AppBar(
- title: Text(widget.title),
- actions: [
- IconButton(
- onPressed: () {
- showSearch(context: context, delegate: FtsSearchDelegate());
- },
- icon: const Icon(Icons.search),
- ),
- statusIcon,
- // Make some space for the "Debug" banner, so that the status
- // icon isn't hidden
- if (kDebugMode) _makeIcon('Debug mode', Icons.developer_mode),
- ],
+ return AppBar(
+ title: title,
+ actions: [
+ IconButton(
+ onPressed: () {
+ showSearch(context: context, delegate: FtsSearchDelegate());
+ },
+ icon: const Icon(Icons.search),
+ ),
+ statusIcon,
+ // Make some space for the "Debug" banner, so that the status
+ // icon isn't hidden
+ if (kDebugMode) _makeIcon('Debug mode', Icons.developer_mode),
+ ],
+ );
+ },
);
}
}
diff --git a/demos/django-todolist/lib/widgets/todo_list_page.dart b/demos/django-todolist/lib/widgets/todo_list_page.dart
index 26dbae63..a457eb98 100644
--- a/demos/django-todolist/lib/widgets/todo_list_page.dart
+++ b/demos/django-todolist/lib/widgets/todo_list_page.dart
@@ -1,7 +1,4 @@
-import 'dart:async';
-
import 'package:flutter/material.dart';
-import 'package:powersync_django_todolist_demo/models/todo_item.dart';
import './status_app_bar.dart';
import './todo_item_dialog.dart';
@@ -34,56 +31,31 @@ class TodoListPage extends StatelessWidget {
);
return Scaffold(
- appBar: StatusAppBar(title: list.name),
+ appBar: StatusAppBar(title: Text(list.name)),
floatingActionButton: button,
body: TodoListWidget(list: list));
}
}
-class TodoListWidget extends StatefulWidget {
+class TodoListWidget extends StatelessWidget {
final TodoList list;
const TodoListWidget({super.key, required this.list});
- @override
- State createState() {
- return TodoListWidgetState();
- }
-}
-
-class TodoListWidgetState extends State {
- List _data = [];
- StreamSubscription? _subscription;
-
- TodoListWidgetState();
-
- @override
- void initState() {
- super.initState();
- final stream = widget.list.watchItems();
- _subscription = stream.listen((data) {
- if (!context.mounted) {
- return;
- }
- setState(() {
- _data = data;
- });
- });
- }
-
- @override
- void dispose() {
- super.dispose();
- _subscription?.cancel();
- }
-
@override
Widget build(BuildContext context) {
- return ListView(
- padding: const EdgeInsets.symmetric(vertical: 8.0),
- children: _data.map((todo) {
- return TodoItemWidget(todo: todo);
- }).toList(),
+ return StreamBuilder(
+ stream: list.watchItems(),
+ builder: (context, snapshot) {
+ final items = snapshot.data ?? const [];
+
+ return ListView(
+ padding: const EdgeInsets.symmetric(vertical: 8.0),
+ children: items.map((todo) {
+ return TodoItemWidget(todo: todo);
+ }).toList(),
+ );
+ },
);
}
}
diff --git a/demos/django-todolist/macos/Podfile b/demos/django-todolist/macos/Podfile
index c795730d..b52666a1 100644
--- a/demos/django-todolist/macos/Podfile
+++ b/demos/django-todolist/macos/Podfile
@@ -1,4 +1,4 @@
-platform :osx, '10.14'
+platform :osx, '10.15'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
diff --git a/demos/django-todolist/macos/Podfile.lock b/demos/django-todolist/macos/Podfile.lock
index 67953800..c6edd223 100644
--- a/demos/django-todolist/macos/Podfile.lock
+++ b/demos/django-todolist/macos/Podfile.lock
@@ -3,29 +3,33 @@ PODS:
- path_provider_foundation (0.0.1):
- Flutter
- FlutterMacOS
- - powersync-sqlite-core (0.1.6)
+ - powersync-sqlite-core (0.4.5)
- powersync_flutter_libs (0.0.1):
- FlutterMacOS
- - powersync-sqlite-core (~> 0.1.6)
+ - powersync-sqlite-core (~> 0.4.5)
- shared_preferences_foundation (0.0.1):
- Flutter
- FlutterMacOS
- - "sqlite3 (3.46.0+1)":
- - "sqlite3/common (= 3.46.0+1)"
- - "sqlite3/common (3.46.0+1)"
- - "sqlite3/dbstatvtab (3.46.0+1)":
+ - sqlite3 (3.49.2):
+ - sqlite3/common (= 3.49.2)
+ - sqlite3/common (3.49.2)
+ - sqlite3/dbstatvtab (3.49.2):
- sqlite3/common
- - "sqlite3/fts5 (3.46.0+1)":
+ - sqlite3/fts5 (3.49.2):
- sqlite3/common
- - "sqlite3/perf-threadsafe (3.46.0+1)":
+ - sqlite3/math (3.49.2):
- sqlite3/common
- - "sqlite3/rtree (3.46.0+1)":
+ - sqlite3/perf-threadsafe (3.49.2):
+ - sqlite3/common
+ - sqlite3/rtree (3.49.2):
- sqlite3/common
- sqlite3_flutter_libs (0.0.1):
+ - Flutter
- FlutterMacOS
- - "sqlite3 (~> 3.46.0+1)"
+ - sqlite3 (~> 3.49.1)
- sqlite3/dbstatvtab
- sqlite3/fts5
+ - sqlite3/math
- sqlite3/perf-threadsafe
- sqlite3/rtree
@@ -34,7 +38,7 @@ DEPENDENCIES:
- path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`)
- powersync_flutter_libs (from `Flutter/ephemeral/.symlinks/plugins/powersync_flutter_libs/macos`)
- shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`)
- - sqlite3_flutter_libs (from `Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/macos`)
+ - sqlite3_flutter_libs (from `Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/darwin`)
SPEC REPOS:
trunk:
@@ -51,17 +55,17 @@ EXTERNAL SOURCES:
shared_preferences_foundation:
:path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin
sqlite3_flutter_libs:
- :path: Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/macos
+ :path: Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/darwin
SPEC CHECKSUMS:
- FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
- path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
- powersync-sqlite-core: 4c38c8f470f6dca61346789fd5436a6826d1e3dd
- powersync_flutter_libs: 1eb1c6790a72afe08e68d4cc489d71ab61da32ee
- shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78
- sqlite3: 292c3e1bfe89f64e51ea7fc7dab9182a017c8630
- sqlite3_flutter_libs: 5ca46c1a04eddfbeeb5b16566164aa7ad1616e7b
+ FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1
+ path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
+ powersync-sqlite-core: 6f32860379009d2a37cadc9e9427a431bdbd83c8
+ powersync_flutter_libs: 41d8a7b193abf15e46f95f0ec1229d86b6893171
+ shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
+ sqlite3: 3c950dc86011117c307eb0b28c4a7bb449dce9f1
+ sqlite3_flutter_libs: f6acaa2172e6bb3e2e70c771661905080e8ebcf2
-PODFILE CHECKSUM: 236401fc2c932af29a9fcf0e97baeeb2d750d367
+PODFILE CHECKSUM: 9ebaf0ce3d369aaa26a9ea0e159195ed94724cf3
-COCOAPODS: 1.15.2
+COCOAPODS: 1.16.2
diff --git a/demos/django-todolist/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/demos/django-todolist/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
index 2c526589..a0e59441 100644
--- a/demos/django-todolist/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
+++ b/demos/django-todolist/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -59,6 +59,7 @@
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
+ enableGPUValidationMode = "1"
allowLocationSimulation = "YES">
diff --git a/demos/django-todolist/macos/Runner/AppDelegate.swift b/demos/django-todolist/macos/Runner/AppDelegate.swift
index d53ef643..b3c17614 100644
--- a/demos/django-todolist/macos/Runner/AppDelegate.swift
+++ b/demos/django-todolist/macos/Runner/AppDelegate.swift
@@ -1,9 +1,13 @@
import Cocoa
import FlutterMacOS
-@NSApplicationMain
+@main
class AppDelegate: FlutterAppDelegate {
override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
return true
}
+
+ override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool {
+ return true
+ }
}
diff --git a/demos/django-todolist/macos/Runner/Configs/AppInfo.xcconfig b/demos/django-todolist/macos/Runner/Configs/AppInfo.xcconfig
index 797d44b3..d00b6f29 100644
--- a/demos/django-todolist/macos/Runner/Configs/AppInfo.xcconfig
+++ b/demos/django-todolist/macos/Runner/Configs/AppInfo.xcconfig
@@ -8,7 +8,7 @@
PRODUCT_NAME = PowerSync Django Demo
// The application's bundle identifier
-PRODUCT_BUNDLE_IDENTIFIER = co.powersync.demotodolist
+PRODUCT_BUNDLE_IDENTIFIER = co.powersync.demotodolist.django
// The copyright displayed in application information
PRODUCT_COPYRIGHT = Copyright © 2023 Journey Mobile, Inc. All rights reserved.
diff --git a/demos/django-todolist/pubspec.lock b/demos/django-todolist/pubspec.lock
index 6f759278..881d6d47 100644
--- a/demos/django-todolist/pubspec.lock
+++ b/demos/django-todolist/pubspec.lock
@@ -5,34 +5,34 @@ packages:
dependency: transitive
description:
name: args
- sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a"
+ sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
url: "https://pub.dev"
source: hosted
- version: "2.5.0"
+ version: "2.7.0"
async:
dependency: transitive
description:
name: async
- sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
+ sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb"
url: "https://pub.dev"
source: hosted
- version: "2.11.0"
+ version: "2.13.0"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
- sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
+ sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
url: "https://pub.dev"
source: hosted
- version: "2.1.1"
+ version: "2.1.2"
characters:
dependency: transitive
description:
name: characters
- sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
+ sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
url: "https://pub.dev"
source: hosted
- version: "1.3.0"
+ version: "1.4.0"
checked_yaml:
dependency: transitive
description:
@@ -45,74 +45,58 @@ packages:
dependency: transitive
description:
name: clock
- sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
+ sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
url: "https://pub.dev"
source: hosted
- version: "1.1.1"
+ version: "1.1.2"
collection:
dependency: transitive
description:
name: collection
- sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
+ sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
url: "https://pub.dev"
source: hosted
- version: "1.18.0"
+ version: "1.19.1"
crypto:
dependency: transitive
description:
name: crypto
- sha256: ec30d999af904f33454ba22ed9a86162b35e52b44ac4807d1d93c288041d7d27
+ sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855"
url: "https://pub.dev"
source: hosted
- version: "3.0.5"
+ version: "3.0.6"
fake_async:
dependency: transitive
description:
name: fake_async
- sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
+ sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
url: "https://pub.dev"
source: hosted
- version: "1.3.1"
- fetch_api:
- dependency: transitive
- description:
- name: fetch_api
- sha256: "97f46c25b480aad74f7cc2ad7ccba2c5c6f08d008e68f95c1077286ce243d0e6"
- url: "https://pub.dev"
- source: hosted
- version: "2.2.0"
- fetch_client:
- dependency: transitive
- description:
- name: fetch_client
- sha256: "9666ee14536778474072245ed5cba07db81ae8eb5de3b7bf4a2d1e2c49696092"
- url: "https://pub.dev"
- source: hosted
- version: "1.1.2"
+ version: "1.3.3"
ffi:
dependency: transitive
description:
name: ffi
- sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6"
+ sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418"
url: "https://pub.dev"
source: hosted
- version: "2.1.3"
+ version: "2.1.4"
file:
dependency: transitive
description:
name: file
- sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c"
+ sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4
url: "https://pub.dev"
source: hosted
- version: "7.0.0"
+ version: "7.0.1"
fixnum:
dependency: transitive
description:
name: fixnum
- sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1"
+ sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be
url: "https://pub.dev"
source: hosted
- version: "1.1.0"
+ version: "1.1.1"
flutter:
dependency: "direct main"
description: flutter
@@ -140,26 +124,18 @@ packages:
dependency: "direct main"
description:
name: http
- sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010
+ sha256: "2c11f3f94c687ee9bad77c171151672986360b2b001d109814ee7140b2cf261b"
url: "https://pub.dev"
source: hosted
- version: "1.2.2"
+ version: "1.4.0"
http_parser:
dependency: transitive
description:
name: http_parser
- sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b"
- url: "https://pub.dev"
- source: hosted
- version: "4.0.2"
- js:
- dependency: transitive
- description:
- name: js
- sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf
+ sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
url: "https://pub.dev"
source: hosted
- version: "0.7.1"
+ version: "4.1.2"
json_annotation:
dependency: transitive
description:
@@ -172,18 +148,18 @@ packages:
dependency: transitive
description:
name: leak_tracker
- sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05"
+ sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0"
url: "https://pub.dev"
source: hosted
- version: "10.0.5"
+ version: "10.0.9"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
- sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806"
+ sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
url: "https://pub.dev"
source: hosted
- version: "3.0.5"
+ version: "3.0.9"
leak_tracker_testing:
dependency: transitive
description:
@@ -204,18 +180,18 @@ packages:
dependency: "direct main"
description:
name: logging
- sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340"
+ sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
url: "https://pub.dev"
source: hosted
- version: "1.2.0"
+ version: "1.3.0"
matcher:
dependency: transitive
description:
name: matcher
- sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
+ sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
url: "https://pub.dev"
source: hosted
- version: "0.12.16+1"
+ version: "0.12.17"
material_color_utilities:
dependency: transitive
description:
@@ -228,10 +204,10 @@ packages:
dependency: transitive
description:
name: meta
- sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
+ sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
url: "https://pub.dev"
source: hosted
- version: "1.15.0"
+ version: "1.16.0"
mutex:
dependency: transitive
description:
@@ -244,34 +220,34 @@ packages:
dependency: "direct main"
description:
name: path
- sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
+ sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
url: "https://pub.dev"
source: hosted
- version: "1.9.0"
+ version: "1.9.1"
path_provider:
dependency: "direct main"
description:
name: path_provider
- sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378
+ sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd"
url: "https://pub.dev"
source: hosted
- version: "2.1.4"
+ version: "2.1.5"
path_provider_android:
dependency: transitive
description:
name: path_provider_android
- sha256: "6f01f8e37ec30b07bc424b4deabac37cacb1bc7e2e515ad74486039918a37eb7"
+ sha256: d0d310befe2c8ab9e7f393288ccbb11b60c019c6b5afc21973eeee4dda2b35e9
url: "https://pub.dev"
source: hosted
- version: "2.2.10"
+ version: "2.2.17"
path_provider_foundation:
dependency: transitive
description:
name: path_provider_foundation
- sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16
+ sha256: "4843174df4d288f5e29185bd6e72a6fbdf5a4a4602717eed565497429f179942"
url: "https://pub.dev"
source: hosted
- version: "2.4.0"
+ version: "2.4.1"
path_provider_linux:
dependency: transitive
description:
@@ -300,10 +276,10 @@ packages:
dependency: transitive
description:
name: platform
- sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65"
+ sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984"
url: "https://pub.dev"
source: hosted
- version: "3.1.5"
+ version: "3.1.6"
plugin_platform_interface:
dependency: transitive
description:
@@ -318,54 +294,61 @@ packages:
path: "../../packages/powersync"
relative: true
source: path
- version: "1.9.2"
+ version: "1.15.0"
+ powersync_core:
+ dependency: "direct overridden"
+ description:
+ path: "../../packages/powersync_core"
+ relative: true
+ source: path
+ version: "1.5.0"
powersync_flutter_libs:
dependency: "direct overridden"
description:
path: "../../packages/powersync_flutter_libs"
relative: true
source: path
- version: "0.4.2"
+ version: "0.4.10"
pub_semver:
dependency: transitive
description:
name: pub_semver
- sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c"
+ sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585"
url: "https://pub.dev"
source: hosted
- version: "2.1.4"
+ version: "2.2.0"
pubspec_parse:
dependency: transitive
description:
name: pubspec_parse
- sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8
+ sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082"
url: "https://pub.dev"
source: hosted
- version: "1.3.0"
+ version: "1.5.0"
shared_preferences:
dependency: "direct main"
description:
name: shared_preferences
- sha256: "746e5369a43170c25816cc472ee016d3a66bc13fcf430c0bc41ad7b4b2922051"
+ sha256: "6e8bf70b7fef813df4e9a36f658ac46d107db4b4cfe1048b477d4e453a8159f5"
url: "https://pub.dev"
source: hosted
- version: "2.3.2"
+ version: "2.5.3"
shared_preferences_android:
dependency: transitive
description:
name: shared_preferences_android
- sha256: a7e8467e9181cef109f601e3f65765685786c1a738a83d7fbbde377589c0d974
+ sha256: "20cbd561f743a342c76c151d6ddb93a9ce6005751e7aa458baad3858bfbfb6ac"
url: "https://pub.dev"
source: hosted
- version: "2.3.1"
+ version: "2.4.10"
shared_preferences_foundation:
dependency: transitive
description:
name: shared_preferences_foundation
- sha256: c4b35f6cb8f63c147312c054ce7c2254c8066745125264f0c88739c417fc9d9f
+ sha256: "6a52cfcdaeac77cad8c97b539ff688ccfc458c007b4db12be584fbe5c0e49e03"
url: "https://pub.dev"
source: hosted
- version: "2.5.2"
+ version: "2.5.4"
shared_preferences_linux:
dependency: transitive
description:
@@ -386,10 +369,10 @@ packages:
dependency: transitive
description:
name: shared_preferences_web
- sha256: d2ca4132d3946fec2184261726b355836a82c33d7d5b67af32692aff18a4684e
+ sha256: c49bd060261c9a3f0ff445892695d6212ff603ef3115edbb448509d407600019
url: "https://pub.dev"
source: hosted
- version: "2.4.2"
+ version: "2.4.3"
shared_preferences_windows:
dependency: transitive
description:
@@ -402,15 +385,15 @@ packages:
dependency: transitive
description: flutter
source: sdk
- version: "0.0.99"
+ version: "0.0.0"
source_span:
dependency: transitive
description:
name: source_span
- sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
+ sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
url: "https://pub.dev"
source: hosted
- version: "1.10.0"
+ version: "1.10.1"
sprintf:
dependency: transitive
description:
@@ -423,82 +406,82 @@ packages:
dependency: transitive
description:
name: sqlite3
- sha256: bb174b3ec2527f9c5f680f73a89af8149dd99782fbb56ea88ad0807c5638f2ed
+ sha256: "310af39c40dd0bb2058538333c9d9840a2725ae0b9f77e4fd09ad6696aa8f66e"
url: "https://pub.dev"
source: hosted
- version: "2.4.7"
+ version: "2.7.5"
sqlite3_flutter_libs:
dependency: transitive
description:
name: sqlite3_flutter_libs
- sha256: "62bbb4073edbcdf53f40c80775f33eea01d301b7b81417e5b3fb7395416258c1"
+ sha256: "1a96b59227828d9eb1463191d684b37a27d66ee5ed7597fcf42eee6452c88a14"
url: "https://pub.dev"
source: hosted
- version: "0.5.24"
+ version: "0.5.32"
sqlite3_web:
dependency: transitive
description:
name: sqlite3_web
- sha256: f22d1dda7a40be0867984f55cdf5c2d599e5f05d3be4a642d78f38b38983f554
+ sha256: "967e076442f7e1233bd7241ca61f3efe4c7fc168dac0f38411bdb3bdf471eb3c"
url: "https://pub.dev"
source: hosted
- version: "0.2.0"
+ version: "0.3.1"
sqlite_async:
dependency: "direct main"
description:
name: sqlite_async
- sha256: d66fb6e6d07c1a834743326c033029f75becbb1fad6823d709f921872abc3d5b
+ sha256: a60e8d5c8df8e694933bd5a312c38393e79ad77d784bb91c6f38ba627bfb7aec
url: "https://pub.dev"
source: hosted
- version: "0.11.0"
+ version: "0.11.4"
stack_trace:
dependency: transitive
description:
name: stack_trace
- sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
+ sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
url: "https://pub.dev"
source: hosted
- version: "1.11.1"
+ version: "1.12.1"
stream_channel:
dependency: transitive
description:
name: stream_channel
- sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
+ sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
url: "https://pub.dev"
source: hosted
- version: "2.1.2"
+ version: "2.1.4"
string_scanner:
dependency: transitive
description:
name: string_scanner
- sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
+ sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
url: "https://pub.dev"
source: hosted
- version: "1.2.0"
+ version: "1.4.1"
term_glyph:
dependency: transitive
description:
name: term_glyph
- sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
+ sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
url: "https://pub.dev"
source: hosted
- version: "1.2.1"
+ version: "1.2.2"
test_api:
dependency: transitive
description:
name: test_api
- sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb"
+ sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
url: "https://pub.dev"
source: hosted
- version: "0.7.2"
+ version: "0.7.4"
typed_data:
dependency: transitive
description:
name: typed_data
- sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c
+ sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
url: "https://pub.dev"
source: hosted
- version: "1.3.2"
+ version: "1.4.0"
universal_io:
dependency: transitive
description:
@@ -511,10 +494,10 @@ packages:
dependency: transitive
description:
name: uuid
- sha256: "83d37c7ad7aaf9aa8e275490669535c8080377cfa7a7004c24dfac53afffaa90"
+ sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff
url: "https://pub.dev"
source: hosted
- version: "4.4.2"
+ version: "4.5.1"
vector_math:
dependency: transitive
description:
@@ -527,34 +510,34 @@ packages:
dependency: transitive
description:
name: vm_service
- sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d"
+ sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02
url: "https://pub.dev"
source: hosted
- version: "14.2.5"
+ version: "15.0.0"
web:
dependency: transitive
description:
name: web
- sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb
+ sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
url: "https://pub.dev"
source: hosted
- version: "1.1.0"
+ version: "1.1.1"
xdg_directories:
dependency: transitive
description:
name: xdg_directories
- sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d
+ sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15"
url: "https://pub.dev"
source: hosted
- version: "1.0.4"
+ version: "1.1.0"
yaml:
dependency: transitive
description:
name: yaml
- sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5"
+ sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
url: "https://pub.dev"
source: hosted
- version: "3.1.2"
+ version: "3.1.3"
sdks:
- dart: ">=3.4.0 <4.0.0"
- flutter: ">=3.22.0"
+ dart: ">=3.7.0 <4.0.0"
+ flutter: ">=3.27.0"
diff --git a/demos/django-todolist/pubspec.yaml b/demos/django-todolist/pubspec.yaml
index 096120d1..4c1cacff 100644
--- a/demos/django-todolist/pubspec.yaml
+++ b/demos/django-todolist/pubspec.yaml
@@ -10,11 +10,11 @@ environment:
dependencies:
flutter:
sdk: flutter
- powersync: ^1.9.3
+ powersync: ^1.16.1
path_provider: ^2.1.1
path: ^1.8.3
logging: ^1.2.0
- sqlite_async: ^0.11.0
+ sqlite_async: ^0.12.0
http: ^1.2.1
shared_preferences: ^2.2.3
diff --git a/demos/firebase-nodejs-todolist/.gitignore b/demos/firebase-nodejs-todolist/.gitignore
new file mode 100644
index 00000000..0b04140a
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/.gitignore
@@ -0,0 +1,50 @@
+# Miscellaneous
+*.class
+*.log
+*.pyc
+*.swp
+.DS_Store
+.atom/
+.buildlog/
+.history
+.svn/
+migrate_working_dir/
+
+# IntelliJ related
+*.iml
+*.ipr
+*.iws
+.idea/
+
+# The .vscode folder contains launch configuration and tasks you configure in
+# VS Code which you may wish to be included in version control, so this line
+# is commented out by default.
+#.vscode/
+
+# Flutter/Dart/Pub related
+**/doc/api/
+**/ios/Flutter/.last_build_id
+.dart_tool/
+.flutter-plugins
+.flutter-plugins-dependencies
+.packages
+.pub-cache/
+.pub/
+/build/
+
+# Symbolication related
+app.*.symbols
+
+# Obfuscation related
+app.*.map.json
+
+# Android Studio will place build artifacts here
+/android/app/debug
+/android/app/profile
+/android/app/release
+
+# asdf
+.tool-versions
+
+# secrets
+app_config.dart
diff --git a/demos/firebase-nodejs-todolist/LICENSE b/demos/firebase-nodejs-todolist/LICENSE
new file mode 100644
index 00000000..0e259d42
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/LICENSE
@@ -0,0 +1,121 @@
+Creative Commons Legal Code
+
+CC0 1.0 Universal
+
+ CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
+ LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
+ ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
+ INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
+ REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
+ PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
+ THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
+ HEREUNDER.
+
+Statement of Purpose
+
+The laws of most jurisdictions throughout the world automatically confer
+exclusive Copyright and Related Rights (defined below) upon the creator
+and subsequent owner(s) (each and all, an "owner") of an original work of
+authorship and/or a database (each, a "Work").
+
+Certain owners wish to permanently relinquish those rights to a Work for
+the purpose of contributing to a commons of creative, cultural and
+scientific works ("Commons") that the public can reliably and without fear
+of later claims of infringement build upon, modify, incorporate in other
+works, reuse and redistribute as freely as possible in any form whatsoever
+and for any purposes, including without limitation commercial purposes.
+These owners may contribute to the Commons to promote the ideal of a free
+culture and the further production of creative, cultural and scientific
+works, or to gain reputation or greater distribution for their Work in
+part through the use and efforts of others.
+
+For these and/or other purposes and motivations, and without any
+expectation of additional consideration or compensation, the person
+associating CC0 with a Work (the "Affirmer"), to the extent that he or she
+is an owner of Copyright and Related Rights in the Work, voluntarily
+elects to apply CC0 to the Work and publicly distribute the Work under its
+terms, with knowledge of his or her Copyright and Related Rights in the
+Work and the meaning and intended legal effect of CC0 on those rights.
+
+1. Copyright and Related Rights. A Work made available under CC0 may be
+protected by copyright and related or neighboring rights ("Copyright and
+Related Rights"). Copyright and Related Rights include, but are not
+limited to, the following:
+
+ i. the right to reproduce, adapt, distribute, perform, display,
+ communicate, and translate a Work;
+ ii. moral rights retained by the original author(s) and/or performer(s);
+iii. publicity and privacy rights pertaining to a person's image or
+ likeness depicted in a Work;
+ iv. rights protecting against unfair competition in regards to a Work,
+ subject to the limitations in paragraph 4(a), below;
+ v. rights protecting the extraction, dissemination, use and reuse of data
+ in a Work;
+ vi. database rights (such as those arising under Directive 96/9/EC of the
+ European Parliament and of the Council of 11 March 1996 on the legal
+ protection of databases, and under any national implementation
+ thereof, including any amended or successor version of such
+ directive); and
+vii. other similar, equivalent or corresponding rights throughout the
+ world based on applicable law or treaty, and any national
+ implementations thereof.
+
+2. Waiver. To the greatest extent permitted by, but not in contravention
+of, applicable law, Affirmer hereby overtly, fully, permanently,
+irrevocably and unconditionally waives, abandons, and surrenders all of
+Affirmer's Copyright and Related Rights and associated claims and causes
+of action, whether now known or unknown (including existing as well as
+future claims and causes of action), in the Work (i) in all territories
+worldwide, (ii) for the maximum duration provided by applicable law or
+treaty (including future time extensions), (iii) in any current or future
+medium and for any number of copies, and (iv) for any purpose whatsoever,
+including without limitation commercial, advertising or promotional
+purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
+member of the public at large and to the detriment of Affirmer's heirs and
+successors, fully intending that such Waiver shall not be subject to
+revocation, rescission, cancellation, termination, or any other legal or
+equitable action to disrupt the quiet enjoyment of the Work by the public
+as contemplated by Affirmer's express Statement of Purpose.
+
+3. Public License Fallback. Should any part of the Waiver for any reason
+be judged legally invalid or ineffective under applicable law, then the
+Waiver shall be preserved to the maximum extent permitted taking into
+account Affirmer's express Statement of Purpose. In addition, to the
+extent the Waiver is so judged Affirmer hereby grants to each affected
+person a royalty-free, non transferable, non sublicensable, non exclusive,
+irrevocable and unconditional license to exercise Affirmer's Copyright and
+Related Rights in the Work (i) in all territories worldwide, (ii) for the
+maximum duration provided by applicable law or treaty (including future
+time extensions), (iii) in any current or future medium and for any number
+of copies, and (iv) for any purpose whatsoever, including without
+limitation commercial, advertising or promotional purposes (the
+"License"). The License shall be deemed effective as of the date CC0 was
+applied by Affirmer to the Work. Should any part of the License for any
+reason be judged legally invalid or ineffective under applicable law, such
+partial invalidity or ineffectiveness shall not invalidate the remainder
+of the License, and in such case Affirmer hereby affirms that he or she
+will not (i) exercise any of his or her remaining Copyright and Related
+Rights in the Work or (ii) assert any associated claims and causes of
+action with respect to the Work, in either case contrary to Affirmer's
+express Statement of Purpose.
+
+4. Limitations and Disclaimers.
+
+ a. No trademark or patent rights held by Affirmer are waived, abandoned,
+ surrendered, licensed or otherwise affected by this document.
+ b. Affirmer offers the Work as-is and makes no representations or
+ warranties of any kind concerning the Work, express, implied,
+ statutory or otherwise, including without limitation warranties of
+ title, merchantability, fitness for a particular purpose, non
+ infringement, or the absence of latent or other defects, accuracy, or
+ the present or absence of errors, whether or not discoverable, all to
+ the greatest extent permissible under applicable law.
+ c. Affirmer disclaims responsibility for clearing rights of other persons
+ that may apply to the Work or any use thereof, including without
+ limitation any person's Copyright and Related Rights in the Work.
+ Further, Affirmer disclaims responsibility for obtaining any necessary
+ consents, permissions or other rights required for any use of the
+ Work.
+ d. Affirmer understands and acknowledges that Creative Commons is not a
+ party to this document and has no duty or obligation with respect to
+ this CC0 or use of the Work.
diff --git a/demos/firebase-nodejs-todolist/README.md b/demos/firebase-nodejs-todolist/README.md
new file mode 100644
index 00000000..c3c577fd
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/README.md
@@ -0,0 +1,49 @@
+# PowerSync + Node.js + Firebase Auth + Flutter Demo: Todo List App
+
+Demo app demonstrating use of the PowerSync SDK for Flutter together with a custom Node.js backend and using Firebase for user auth on the client.
+
+This demo can run alongside the [powersync-nodejs-firebase-backend-todolist-demo](https://github.com/powersync-ja/powersync-nodejs-firebase-backend-todolist-demo) for testing and demo purposes.
+
+We suggest you first set up the `powersync-nodejs-firebase-backend-todolist-demo` before setting up the client as shown in this repo.
+
+# Running the app
+
+Ensure you have [melos](https://melos.invertase.dev/~melos-latest/getting-started) installed.
+
+1. `cd demos/firebase-nodejs-todolist`
+2. `melos prepare`
+3. `cp lib/app_config_template.dart lib/app_config.dart`
+4. Insert your Supabase and PowerSync project credentials into `lib/app_config.dart` (See instructions below)
+5. `flutter run`
+
+# Add your Firebase app
+Follow the step found in [this page](https://firebase.google.com/docs/flutter/setup?platform=ios) from the Firebase docs to login to your Firebase account and to initialize the Firebase credentials.
+
+# Set up Supabase project
+
+Create a new Supabase project, and paste and run the contents of [database.sql](./database.sql) in the Supabase SQL editor.
+
+It does the following:
+
+1. Create `lists` and `todos` tables.
+2. Create a publication called `powersync` for `lists` and `todos`.
+3. Enable row level security (RLS), allowing users to only view and edit their own data.
+4. Create a trigger to populate some sample data when a user registers.
+
+We won't be using the Supabase Flutter SDK for this demo, but rather as a hosted PostgresSQL database that the app connects to.
+
+# Set up PowerSync Instance
+
+Create a new PowerSync instance, connecting to the database of the Supabase project.
+
+Then deploy the following sync rules:
+
+```yaml
+bucket_definitions:
+ user_lists:
+ # Separate bucket per todo list
+ parameters: select id as list_id from lists where owner_id = request.user_id()
+ data:
+ - select * from lists where id = bucket.list_id
+ - select * from todos where list_id = bucket.list_id
+```
diff --git a/demos/firebase-nodejs-todolist/analysis_options.yaml b/demos/firebase-nodejs-todolist/analysis_options.yaml
new file mode 100644
index 00000000..93a247ad
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/analysis_options.yaml
@@ -0,0 +1,32 @@
+# This file configures the analyzer, which statically analyzes Dart code to
+# check for errors, warnings, and lints.
+#
+# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
+# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
+# invoked from the command line by running `flutter analyze`.
+
+# The following line activates a set of recommended lints for Flutter apps,
+# packages, and plugins designed to encourage good coding practices.
+include: package:flutter_lints/flutter.yaml
+
+linter:
+ # The lint rules applied to this project can be customized in the
+ # section below to disable rules from the `package:flutter_lints/flutter.yaml`
+ # included above or to enable additional rules. A list of all available lints
+ # and their documentation is published at
+ # https://dart-lang.github.io/linter/lints/index.html.
+ #
+ # Instead of disabling a lint rule for the entire project in the
+ # section below, it can also be suppressed for a single line of code
+ # or a specific dart file by using the `// ignore: name_of_lint` and
+ # `// ignore_for_file: name_of_lint` syntax on the line or in the file
+ # producing the lint.
+ rules:
+ avoid_print: false # Uncomment to disable the `avoid_print` rule
+ # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
+# Additional information about this file can be found at
+# https://dart.dev/guides/language/analysis-options
+
+analyzer:
+ exclude:
+ - lib/firebase.dart # Exclude this as it imports a file that is not checked in
diff --git a/demos/firebase-nodejs-todolist/android/.gitignore b/demos/firebase-nodejs-todolist/android/.gitignore
new file mode 100644
index 00000000..6f568019
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/android/.gitignore
@@ -0,0 +1,13 @@
+gradle-wrapper.jar
+/.gradle
+/captures/
+/gradlew
+/gradlew.bat
+/local.properties
+GeneratedPluginRegistrant.java
+
+# Remember to never publicly share your keystore.
+# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
+key.properties
+**/*.keystore
+**/*.jks
diff --git a/demos/supabase-todolist/android/app/build.gradle b/demos/firebase-nodejs-todolist/android/app/build.gradle
similarity index 93%
rename from demos/supabase-todolist/android/app/build.gradle
rename to demos/firebase-nodejs-todolist/android/app/build.gradle
index 9daa778b..ad623aee 100644
--- a/demos/supabase-todolist/android/app/build.gradle
+++ b/demos/firebase-nodejs-todolist/android/app/build.gradle
@@ -22,6 +22,9 @@ if (flutterVersionName == null) {
}
apply plugin: 'com.android.application'
+// START: FlutterFire Configuration
+apply plugin: 'com.google.gms.google-services'
+// END: FlutterFire Configuration
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
@@ -46,7 +49,7 @@ android {
applicationId "co.powersync.demotodolist"
// You can update the following values to match your application needs.
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
- minSdkVersion 24
+ minSdkVersion 23
targetSdkVersion flutter.targetSdkVersion
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
diff --git a/demos/firebase-nodejs-todolist/android/app/google-services.json b/demos/firebase-nodejs-todolist/android/app/google-services.json
new file mode 100644
index 00000000..839fb1d1
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/android/app/google-services.json
@@ -0,0 +1,29 @@
+{
+ "project_info": {
+ "project_number": "1069616552579",
+ "project_id": "sample-firebase-ai-app-27d98",
+ "storage_bucket": "sample-firebase-ai-app-27d98.firebasestorage.app"
+ },
+ "client": [
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:1069616552579:android:d2cb390fea186a49db59b6",
+ "android_client_info": {
+ "package_name": "co.powersync.demotodolist"
+ }
+ },
+ "oauth_client": [],
+ "api_key": [
+ {
+ "current_key": "AIzaSyDBk2GgaUqLvPWGe6cI0h6G4ZZweS2JKGE"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": []
+ }
+ }
+ }
+ ],
+ "configuration_version": "1"
+}
\ No newline at end of file
diff --git a/demos/firebase-nodejs-todolist/android/app/src/debug/AndroidManifest.xml b/demos/firebase-nodejs-todolist/android/app/src/debug/AndroidManifest.xml
new file mode 100644
index 00000000..f19dd7d6
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/android/app/src/debug/AndroidManifest.xml
@@ -0,0 +1,4 @@
+
+
+
diff --git a/demos/firebase-nodejs-todolist/android/app/src/main/AndroidManifest.xml b/demos/firebase-nodejs-todolist/android/app/src/main/AndroidManifest.xml
new file mode 100644
index 00000000..55e175c4
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/android/app/src/main/AndroidManifest.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demos/supabase-todolist/android/app/src/main/kotlin/co/powersync/demotodolist/MainActivity.kt b/demos/firebase-nodejs-todolist/android/app/src/main/kotlin/co/powersync/demotodolist/MainActivity.kt
similarity index 100%
rename from demos/supabase-todolist/android/app/src/main/kotlin/co/powersync/demotodolist/MainActivity.kt
rename to demos/firebase-nodejs-todolist/android/app/src/main/kotlin/co/powersync/demotodolist/MainActivity.kt
diff --git a/demos/firebase-nodejs-todolist/android/app/src/main/res/drawable-v21/launch_background.xml b/demos/firebase-nodejs-todolist/android/app/src/main/res/drawable-v21/launch_background.xml
new file mode 100644
index 00000000..f74085f3
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/android/app/src/main/res/drawable-v21/launch_background.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
diff --git a/demos/firebase-nodejs-todolist/android/app/src/main/res/drawable/launch_background.xml b/demos/firebase-nodejs-todolist/android/app/src/main/res/drawable/launch_background.xml
new file mode 100644
index 00000000..304732f8
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/android/app/src/main/res/drawable/launch_background.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
diff --git a/demos/firebase-nodejs-todolist/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/demos/firebase-nodejs-todolist/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 00000000..db77bb4b
Binary files /dev/null and b/demos/firebase-nodejs-todolist/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/demos/firebase-nodejs-todolist/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/demos/firebase-nodejs-todolist/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 00000000..17987b79
Binary files /dev/null and b/demos/firebase-nodejs-todolist/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/demos/firebase-nodejs-todolist/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/demos/firebase-nodejs-todolist/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 00000000..09d43914
Binary files /dev/null and b/demos/firebase-nodejs-todolist/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/demos/firebase-nodejs-todolist/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/demos/firebase-nodejs-todolist/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 00000000..d5f1c8d3
Binary files /dev/null and b/demos/firebase-nodejs-todolist/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/demos/firebase-nodejs-todolist/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/demos/firebase-nodejs-todolist/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 00000000..4d6372ee
Binary files /dev/null and b/demos/firebase-nodejs-todolist/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/demos/firebase-nodejs-todolist/android/app/src/main/res/values-night/styles.xml b/demos/firebase-nodejs-todolist/android/app/src/main/res/values-night/styles.xml
new file mode 100644
index 00000000..06952be7
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/android/app/src/main/res/values-night/styles.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/demos/firebase-nodejs-todolist/android/app/src/main/res/values/styles.xml b/demos/firebase-nodejs-todolist/android/app/src/main/res/values/styles.xml
new file mode 100644
index 00000000..cb1ef880
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/android/app/src/main/res/values/styles.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/demos/firebase-nodejs-todolist/android/app/src/profile/AndroidManifest.xml b/demos/firebase-nodejs-todolist/android/app/src/profile/AndroidManifest.xml
new file mode 100644
index 00000000..f19dd7d6
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/android/app/src/profile/AndroidManifest.xml
@@ -0,0 +1,4 @@
+
+
+
diff --git a/demos/supabase-todolist/android/build.gradle b/demos/firebase-nodejs-todolist/android/build.gradle
similarity index 76%
rename from demos/supabase-todolist/android/build.gradle
rename to demos/firebase-nodejs-todolist/android/build.gradle
index 713d7f6e..58d4dcd6 100644
--- a/demos/supabase-todolist/android/build.gradle
+++ b/demos/firebase-nodejs-todolist/android/build.gradle
@@ -1,5 +1,5 @@
buildscript {
- ext.kotlin_version = '1.7.10'
+ ext.kotlin_version = '2.0.0'
repositories {
google()
mavenCentral()
@@ -7,6 +7,9 @@ buildscript {
dependencies {
classpath 'com.android.tools.build:gradle:7.2.0'
+ // START: FlutterFire Configuration
+ classpath 'com.google.gms:google-services:4.3.10'
+ // END: FlutterFire Configuration
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
diff --git a/demos/firebase-nodejs-todolist/android/gradle.properties b/demos/firebase-nodejs-todolist/android/gradle.properties
new file mode 100644
index 00000000..94adc3a3
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/android/gradle.properties
@@ -0,0 +1,3 @@
+org.gradle.jvmargs=-Xmx1536M
+android.useAndroidX=true
+android.enableJetifier=true
diff --git a/demos/firebase-nodejs-todolist/android/gradle/wrapper/gradle-wrapper.properties b/demos/firebase-nodejs-todolist/android/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 00000000..9bb05a27
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/android/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.1-bin.zip
\ No newline at end of file
diff --git a/demos/supabase-todolist/android/settings.gradle b/demos/firebase-nodejs-todolist/android/settings.gradle
similarity index 100%
rename from demos/supabase-todolist/android/settings.gradle
rename to demos/firebase-nodejs-todolist/android/settings.gradle
diff --git a/demos/firebase-nodejs-todolist/database.sql b/demos/firebase-nodejs-todolist/database.sql
new file mode 100644
index 00000000..6d5daaeb
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/database.sql
@@ -0,0 +1,34 @@
+-- Create tables
+create table
+ public.lists (
+ id text not null,
+ created_at timestamp with time zone not null default now(),
+ name text not null,
+ owner_id text not null,
+ constraint lists_pkey primary key (id)
+ ) tablespace pg_default;
+
+create table
+ public.todos (
+ id text not null,
+ created_at timestamp with time zone null default now(),
+ completed_at timestamp with time zone null,
+ description text not null,
+ completed boolean not null default false,
+ created_by text null,
+ completed_by text null,
+ list_id text not null,
+ constraint todos_pkey primary key (id),
+ constraint todos_list_id_fkey foreign key (list_id) references lists (id) on delete cascade
+ ) tablespace pg_default;
+
+-- Create publication for powersync
+create publication powersync for table lists, todos;
+
+-- Set up Row Level Security (RLS)
+-- See https://supabase.com/docs/guides/auth/row-level-security for more details.
+alter table public.lists
+ enable row level security;
+
+alter table public.todos
+ enable row level security;
diff --git a/demos/firebase-nodejs-todolist/firebase.json b/demos/firebase-nodejs-todolist/firebase.json
new file mode 100644
index 00000000..8bad41d3
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/firebase.json
@@ -0,0 +1 @@
+{"flutter":{"platforms":{"android":{"default":{"projectId":"sample-firebase-ai-app-27d98","appId":"1:1069616552579:android:d2cb390fea186a49db59b6","fileOutput":"android/app/google-services.json"}},"ios":{"default":{"projectId":"sample-firebase-ai-app-27d98","appId":"1:1069616552579:ios:0d30b90e81427c07db59b6","uploadDebugSymbols":false,"fileOutput":"ios/Runner/GoogleService-Info.plist"}},"macos":{"default":{"projectId":"sample-firebase-ai-app-27d98","appId":"1:1069616552579:ios:0d30b90e81427c07db59b6","uploadDebugSymbols":false,"fileOutput":"macos/Runner/GoogleService-Info.plist"}},"dart":{"lib/firebase_options.dart":{"projectId":"sample-firebase-ai-app-27d98","configurations":{"android":"1:1069616552579:android:d2cb390fea186a49db59b6","ios":"1:1069616552579:ios:0d30b90e81427c07db59b6","macos":"1:1069616552579:ios:0d30b90e81427c07db59b6","windows":"1:1069616552579:web:795aadd36a32e2c5db59b6"}}}}}}
\ No newline at end of file
diff --git a/demos/firebase-nodejs-todolist/ios/.gitignore b/demos/firebase-nodejs-todolist/ios/.gitignore
new file mode 100644
index 00000000..7a7f9873
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/ios/.gitignore
@@ -0,0 +1,34 @@
+**/dgph
+*.mode1v3
+*.mode2v3
+*.moved-aside
+*.pbxuser
+*.perspectivev3
+**/*sync/
+.sconsign.dblite
+.tags*
+**/.vagrant/
+**/DerivedData/
+Icon?
+**/Pods/
+**/.symlinks/
+profile
+xcuserdata
+**/.generated/
+Flutter/App.framework
+Flutter/Flutter.framework
+Flutter/Flutter.podspec
+Flutter/Generated.xcconfig
+Flutter/ephemeral/
+Flutter/app.flx
+Flutter/app.zip
+Flutter/flutter_assets/
+Flutter/flutter_export_environment.sh
+ServiceDefinitions.json
+Runner/GeneratedPluginRegistrant.*
+
+# Exceptions to above rules.
+!default.mode1v3
+!default.mode2v3
+!default.pbxuser
+!default.perspectivev3
diff --git a/demos/firebase-nodejs-todolist/ios/Flutter/AppFrameworkInfo.plist b/demos/firebase-nodejs-todolist/ios/Flutter/AppFrameworkInfo.plist
new file mode 100644
index 00000000..7c569640
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/ios/Flutter/AppFrameworkInfo.plist
@@ -0,0 +1,26 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleExecutable
+ App
+ CFBundleIdentifier
+ io.flutter.flutter.app
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ App
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1.0
+ MinimumOSVersion
+ 12.0
+
+
diff --git a/demos/firebase-nodejs-todolist/ios/Flutter/Debug.xcconfig b/demos/firebase-nodejs-todolist/ios/Flutter/Debug.xcconfig
new file mode 100644
index 00000000..ec97fc6f
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/ios/Flutter/Debug.xcconfig
@@ -0,0 +1,2 @@
+#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
+#include "Generated.xcconfig"
diff --git a/demos/firebase-nodejs-todolist/ios/Flutter/Release.xcconfig b/demos/firebase-nodejs-todolist/ios/Flutter/Release.xcconfig
new file mode 100644
index 00000000..c4855bfe
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/ios/Flutter/Release.xcconfig
@@ -0,0 +1,2 @@
+#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
+#include "Generated.xcconfig"
diff --git a/demos/firebase-nodejs-todolist/ios/Podfile b/demos/firebase-nodejs-todolist/ios/Podfile
new file mode 100644
index 00000000..2c1e086a
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/ios/Podfile
@@ -0,0 +1,48 @@
+# Uncomment this line to define a global platform for your project
+platform :ios, '13.0'
+
+# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
+ENV['COCOAPODS_DISABLE_STATS'] = 'true'
+
+project 'Runner', {
+ 'Debug' => :debug,
+ 'Profile' => :release,
+ 'Release' => :release,
+}
+
+def flutter_root
+ generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
+ unless File.exist?(generated_xcode_build_settings_path)
+ raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
+ end
+
+ File.foreach(generated_xcode_build_settings_path) do |line|
+ matches = line.match(/FLUTTER_ROOT\=(.*)/)
+ return matches[1].strip if matches
+ end
+ raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
+end
+
+require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
+
+flutter_ios_podfile_setup
+
+target 'Runner' do
+ use_frameworks!
+ use_modular_headers!
+
+ flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
+end
+
+post_install do |installer|
+ installer.pods_project.targets.each do |project|
+ flutter_additional_ios_build_settings(project)
+ end
+ installer.generated_projects.each do |project|
+ project.targets.each do |target|
+ target.build_configurations.each do |config|
+ config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0'
+ end
+ end
+ end
+end
diff --git a/demos/firebase-nodejs-todolist/ios/Podfile.lock b/demos/firebase-nodejs-todolist/ios/Podfile.lock
new file mode 100644
index 00000000..f5b33ded
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/ios/Podfile.lock
@@ -0,0 +1,165 @@
+PODS:
+ - app_links (0.0.2):
+ - Flutter
+ - Firebase/Auth (11.10.0):
+ - Firebase/CoreOnly
+ - FirebaseAuth (~> 11.10.0)
+ - Firebase/CoreOnly (11.10.0):
+ - FirebaseCore (~> 11.10.0)
+ - firebase_auth (5.5.3):
+ - Firebase/Auth (= 11.10.0)
+ - firebase_core
+ - Flutter
+ - firebase_core (3.13.0):
+ - Firebase/CoreOnly (= 11.10.0)
+ - Flutter
+ - FirebaseAppCheckInterop (11.15.0)
+ - FirebaseAuth (11.10.0):
+ - FirebaseAppCheckInterop (~> 11.0)
+ - FirebaseAuthInterop (~> 11.0)
+ - FirebaseCore (~> 11.10.0)
+ - FirebaseCoreExtension (~> 11.10.0)
+ - GoogleUtilities/AppDelegateSwizzler (~> 8.0)
+ - GoogleUtilities/Environment (~> 8.0)
+ - GTMSessionFetcher/Core (< 5.0, >= 3.4)
+ - RecaptchaInterop (~> 101.0)
+ - FirebaseAuthInterop (11.15.0)
+ - FirebaseCore (11.10.0):
+ - FirebaseCoreInternal (~> 11.10.0)
+ - GoogleUtilities/Environment (~> 8.0)
+ - GoogleUtilities/Logger (~> 8.0)
+ - FirebaseCoreExtension (11.10.0):
+ - FirebaseCore (~> 11.10.0)
+ - FirebaseCoreInternal (11.10.0):
+ - "GoogleUtilities/NSData+zlib (~> 8.0)"
+ - Flutter (1.0.0)
+ - GoogleUtilities/AppDelegateSwizzler (8.1.0):
+ - GoogleUtilities/Environment
+ - GoogleUtilities/Logger
+ - GoogleUtilities/Network
+ - GoogleUtilities/Privacy
+ - GoogleUtilities/Environment (8.1.0):
+ - GoogleUtilities/Privacy
+ - GoogleUtilities/Logger (8.1.0):
+ - GoogleUtilities/Environment
+ - GoogleUtilities/Privacy
+ - GoogleUtilities/Network (8.1.0):
+ - GoogleUtilities/Logger
+ - "GoogleUtilities/NSData+zlib"
+ - GoogleUtilities/Privacy
+ - GoogleUtilities/Reachability
+ - "GoogleUtilities/NSData+zlib (8.1.0)":
+ - GoogleUtilities/Privacy
+ - GoogleUtilities/Privacy (8.1.0)
+ - GoogleUtilities/Reachability (8.1.0):
+ - GoogleUtilities/Logger
+ - GoogleUtilities/Privacy
+ - GTMSessionFetcher/Core (4.5.0)
+ - path_provider_foundation (0.0.1):
+ - Flutter
+ - FlutterMacOS
+ - powersync-sqlite-core (0.4.5)
+ - powersync_flutter_libs (0.0.1):
+ - Flutter
+ - powersync-sqlite-core (~> 0.4.5)
+ - RecaptchaInterop (101.0.0)
+ - shared_preferences_foundation (0.0.1):
+ - Flutter
+ - FlutterMacOS
+ - sqlite3 (3.49.2):
+ - sqlite3/common (= 3.49.2)
+ - sqlite3/common (3.49.2)
+ - sqlite3/dbstatvtab (3.49.2):
+ - sqlite3/common
+ - sqlite3/fts5 (3.49.2):
+ - sqlite3/common
+ - sqlite3/math (3.49.2):
+ - sqlite3/common
+ - sqlite3/perf-threadsafe (3.49.2):
+ - sqlite3/common
+ - sqlite3/rtree (3.49.2):
+ - sqlite3/common
+ - sqlite3_flutter_libs (0.0.1):
+ - Flutter
+ - FlutterMacOS
+ - sqlite3 (~> 3.49.1)
+ - sqlite3/dbstatvtab
+ - sqlite3/fts5
+ - sqlite3/math
+ - sqlite3/perf-threadsafe
+ - sqlite3/rtree
+ - url_launcher_ios (0.0.1):
+ - Flutter
+
+DEPENDENCIES:
+ - app_links (from `.symlinks/plugins/app_links/ios`)
+ - firebase_auth (from `.symlinks/plugins/firebase_auth/ios`)
+ - firebase_core (from `.symlinks/plugins/firebase_core/ios`)
+ - Flutter (from `Flutter`)
+ - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
+ - powersync_flutter_libs (from `.symlinks/plugins/powersync_flutter_libs/ios`)
+ - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
+ - sqlite3_flutter_libs (from `.symlinks/plugins/sqlite3_flutter_libs/darwin`)
+ - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
+
+SPEC REPOS:
+ trunk:
+ - Firebase
+ - FirebaseAppCheckInterop
+ - FirebaseAuth
+ - FirebaseAuthInterop
+ - FirebaseCore
+ - FirebaseCoreExtension
+ - FirebaseCoreInternal
+ - GoogleUtilities
+ - GTMSessionFetcher
+ - powersync-sqlite-core
+ - RecaptchaInterop
+ - sqlite3
+
+EXTERNAL SOURCES:
+ app_links:
+ :path: ".symlinks/plugins/app_links/ios"
+ firebase_auth:
+ :path: ".symlinks/plugins/firebase_auth/ios"
+ firebase_core:
+ :path: ".symlinks/plugins/firebase_core/ios"
+ Flutter:
+ :path: Flutter
+ path_provider_foundation:
+ :path: ".symlinks/plugins/path_provider_foundation/darwin"
+ powersync_flutter_libs:
+ :path: ".symlinks/plugins/powersync_flutter_libs/ios"
+ shared_preferences_foundation:
+ :path: ".symlinks/plugins/shared_preferences_foundation/darwin"
+ sqlite3_flutter_libs:
+ :path: ".symlinks/plugins/sqlite3_flutter_libs/darwin"
+ url_launcher_ios:
+ :path: ".symlinks/plugins/url_launcher_ios/ios"
+
+SPEC CHECKSUMS:
+ app_links: 76b66b60cc809390ca1ad69bfd66b998d2387ac7
+ Firebase: 1fe1c0a7d9aaea32efe01fbea5f0ebd8d70e53a2
+ firebase_auth: 83bf106e5ac670dd3a0af27a86be6cba16a85723
+ firebase_core: 2d4534e7b489907dcede540c835b48981d890943
+ FirebaseAppCheckInterop: 06fe5a3799278ae4667e6c432edd86b1030fa3df
+ FirebaseAuth: c4146bdfdc87329f9962babd24dae89373f49a32
+ FirebaseAuthInterop: 7087d7a4ee4bc4de019b2d0c240974ed5d89e2fd
+ FirebaseCore: 8344daef5e2661eb004b177488d6f9f0f24251b7
+ FirebaseCoreExtension: 6f357679327f3614e995dc7cf3f2d600bdc774ac
+ FirebaseCoreInternal: ef4505d2afb1d0ebbc33162cb3795382904b5679
+ Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467
+ GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1
+ GTMSessionFetcher: fc75fc972958dceedee61cb662ae1da7a83a91cf
+ path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
+ powersync-sqlite-core: 6f32860379009d2a37cadc9e9427a431bdbd83c8
+ powersync_flutter_libs: 7684a62208907328906eb932f1fc8b3d8879974e
+ RecaptchaInterop: 11e0b637842dfb48308d242afc3f448062325aba
+ shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
+ sqlite3: 3c950dc86011117c307eb0b28c4a7bb449dce9f1
+ sqlite3_flutter_libs: f6acaa2172e6bb3e2e70c771661905080e8ebcf2
+ url_launcher_ios: 694010445543906933d732453a59da0a173ae33d
+
+PODFILE CHECKSUM: 2c1730c97ea13f1ea48b32e9c79de785b4f2f02f
+
+COCOAPODS: 1.16.2
diff --git a/demos/firebase-nodejs-todolist/ios/Runner.xcodeproj/project.pbxproj b/demos/firebase-nodejs-todolist/ios/Runner.xcodeproj/project.pbxproj
new file mode 100644
index 00000000..3960ce08
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/ios/Runner.xcodeproj/project.pbxproj
@@ -0,0 +1,556 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 54;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
+ 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
+ 5808A50FFFEBFEB63435C2A8 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = FA5376E94CB870616F8A9D3E /* GoogleService-Info.plist */; };
+ 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
+ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
+ 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
+ 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
+ B2C70762C97CE3E3CEB912CB /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B9CC0EA1BA15CD3CCAD0356 /* Pods_Runner.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 9705A1C41CF9048500538489 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; };
+ 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; };
+ 15764CEB058B2B69D5E35280 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; };
+ 3153F415177CAE497AE7D235 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; };
+ 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; };
+ 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; };
+ 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
+ 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; };
+ 7B9CC0EA1BA15CD3CCAD0356 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; };
+ 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; };
+ 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
+ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
+ 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
+ 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ CDF8C9971FE1B0CF3262ED53 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; };
+ FA5376E94CB870616F8A9D3E /* GoogleService-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "Runner/GoogleService-Info.plist"; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 97C146EB1CF9000F007C117D /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B2C70762C97CE3E3CEB912CB /* Pods_Runner.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 9740EEB11CF90186004384FC /* Flutter */ = {
+ isa = PBXGroup;
+ children = (
+ 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
+ 9740EEB21CF90195004384FC /* Debug.xcconfig */,
+ 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
+ 9740EEB31CF90195004384FC /* Generated.xcconfig */,
+ );
+ name = Flutter;
+ sourceTree = "";
+ };
+ 97C146E51CF9000F007C117D = {
+ isa = PBXGroup;
+ children = (
+ 9740EEB11CF90186004384FC /* Flutter */,
+ 97C146F01CF9000F007C117D /* Runner */,
+ 97C146EF1CF9000F007C117D /* Products */,
+ A151B04DC3D1415EEF784588 /* Pods */,
+ C1E97B63847FB6B811E12FEA /* Frameworks */,
+ FA5376E94CB870616F8A9D3E /* GoogleService-Info.plist */,
+ );
+ sourceTree = "";
+ };
+ 97C146EF1CF9000F007C117D /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 97C146EE1CF9000F007C117D /* Runner.app */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 97C146F01CF9000F007C117D /* Runner */ = {
+ isa = PBXGroup;
+ children = (
+ 97C146FA1CF9000F007C117D /* Main.storyboard */,
+ 97C146FD1CF9000F007C117D /* Assets.xcassets */,
+ 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
+ 97C147021CF9000F007C117D /* Info.plist */,
+ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
+ 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
+ 74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
+ 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
+ );
+ path = Runner;
+ sourceTree = "";
+ };
+ A151B04DC3D1415EEF784588 /* Pods */ = {
+ isa = PBXGroup;
+ children = (
+ 3153F415177CAE497AE7D235 /* Pods-Runner.debug.xcconfig */,
+ CDF8C9971FE1B0CF3262ED53 /* Pods-Runner.release.xcconfig */,
+ 15764CEB058B2B69D5E35280 /* Pods-Runner.profile.xcconfig */,
+ );
+ name = Pods;
+ path = Pods;
+ sourceTree = "";
+ };
+ C1E97B63847FB6B811E12FEA /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 7B9CC0EA1BA15CD3CCAD0356 /* Pods_Runner.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 97C146ED1CF9000F007C117D /* Runner */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
+ buildPhases = (
+ E916CBFE94483EF7C2F17F6C /* [CP] Check Pods Manifest.lock */,
+ 9740EEB61CF901F6004384FC /* Run Script */,
+ 97C146EA1CF9000F007C117D /* Sources */,
+ 97C146EB1CF9000F007C117D /* Frameworks */,
+ 97C146EC1CF9000F007C117D /* Resources */,
+ 9705A1C41CF9048500538489 /* Embed Frameworks */,
+ 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
+ 0A5FBCADCBC1AF2E0353A84D /* [CP] Embed Pods Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = Runner;
+ productName = Runner;
+ productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 97C146E61CF9000F007C117D /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 1510;
+ ORGANIZATIONNAME = "";
+ TargetAttributes = {
+ 97C146ED1CF9000F007C117D = {
+ CreatedOnToolsVersion = 7.3.1;
+ LastSwiftMigration = 1100;
+ };
+ };
+ };
+ buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
+ compatibilityVersion = "Xcode 9.3";
+ developmentRegion = en;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = 97C146E51CF9000F007C117D;
+ productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 97C146ED1CF9000F007C117D /* Runner */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 97C146EC1CF9000F007C117D /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
+ 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
+ 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
+ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
+ 5808A50FFFEBFEB63435C2A8 /* GoogleService-Info.plist in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 0A5FBCADCBC1AF2E0353A84D /* [CP] Embed Pods Frameworks */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Embed Pods Frameworks";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
+ isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
+ );
+ name = "Thin Binary";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
+ };
+ 9740EEB61CF901F6004384FC /* Run Script */ = {
+ isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Run Script";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
+ };
+ E916CBFE94483EF7C2F17F6C /* [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-Runner-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;
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 97C146EA1CF9000F007C117D /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
+ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ 97C146FA1CF9000F007C117D /* Main.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 97C146FB1CF9000F007C117D /* Base */,
+ );
+ name = Main.storyboard;
+ sourceTree = "";
+ };
+ 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 97C147001CF9000F007C117D /* Base */,
+ );
+ name = LaunchScreen.storyboard;
+ sourceTree = "";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 249021D3217E4FDB00AE95B9 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = iphoneos;
+ SUPPORTED_PLATFORMS = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Profile;
+ };
+ 249021D4217E4FDB00AE95B9 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
+ ENABLE_BITCODE = NO;
+ INFOPLIST_FILE = Runner/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = co.powersync.demotodolist;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
+ SWIFT_VERSION = 5.0;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Profile;
+ };
+ 97C147031CF9000F007C117D /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ 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 = 12.0;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ 97C147041CF9000F007C117D /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = iphoneos;
+ SUPPORTED_PLATFORMS = iphoneos;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ 97C147061CF9000F007C117D /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
+ ENABLE_BITCODE = NO;
+ INFOPLIST_FILE = Runner/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = co.powersync.demotodolist;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Debug;
+ };
+ 97C147071CF9000F007C117D /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
+ ENABLE_BITCODE = NO;
+ INFOPLIST_FILE = Runner/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = co.powersync.demotodolist;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
+ SWIFT_VERSION = 5.0;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 97C147031CF9000F007C117D /* Debug */,
+ 97C147041CF9000F007C117D /* Release */,
+ 249021D3217E4FDB00AE95B9 /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 97C147061CF9000F007C117D /* Debug */,
+ 97C147071CF9000F007C117D /* Release */,
+ 249021D4217E4FDB00AE95B9 /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 97C146E61CF9000F007C117D /* Project object */;
+}
diff --git a/demos/firebase-nodejs-todolist/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/demos/firebase-nodejs-todolist/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 00000000..919434a6
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/demos/firebase-nodejs-todolist/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/demos/firebase-nodejs-todolist/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 00000000..18d98100
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/demos/firebase-nodejs-todolist/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/demos/firebase-nodejs-todolist/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
new file mode 100644
index 00000000..f9b0d7c5
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
@@ -0,0 +1,8 @@
+
+
+
+
+ PreviewsEnabled
+
+
+
diff --git a/demos/firebase-nodejs-todolist/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/demos/firebase-nodejs-todolist/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
new file mode 100644
index 00000000..5e31d3d3
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demos/firebase-nodejs-todolist/ios/Runner.xcworkspace/contents.xcworkspacedata b/demos/firebase-nodejs-todolist/ios/Runner.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 00000000..21a3cc14
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/ios/Runner.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
diff --git a/demos/firebase-nodejs-todolist/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/demos/firebase-nodejs-todolist/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 00000000..18d98100
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/demos/firebase-nodejs-todolist/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/demos/firebase-nodejs-todolist/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
new file mode 100644
index 00000000..f9b0d7c5
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
@@ -0,0 +1,8 @@
+
+
+
+
+ PreviewsEnabled
+
+
+
diff --git a/demos/firebase-nodejs-todolist/ios/Runner/AppDelegate.swift b/demos/firebase-nodejs-todolist/ios/Runner/AppDelegate.swift
new file mode 100644
index 00000000..70693e4a
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/ios/Runner/AppDelegate.swift
@@ -0,0 +1,13 @@
+import UIKit
+import Flutter
+
+@UIApplicationMain
+@objc class AppDelegate: FlutterAppDelegate {
+ override func application(
+ _ application: UIApplication,
+ didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
+ ) -> Bool {
+ GeneratedPluginRegistrant.register(with: self)
+ return super.application(application, didFinishLaunchingWithOptions: launchOptions)
+ }
+}
diff --git a/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 00000000..d36b1fab
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,122 @@
+{
+ "images" : [
+ {
+ "size" : "20x20",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-20x20@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "20x20",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-20x20@3x.png",
+ "scale" : "3x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-29x29@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-29x29@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-29x29@3x.png",
+ "scale" : "3x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-40x40@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-40x40@3x.png",
+ "scale" : "3x"
+ },
+ {
+ "size" : "60x60",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-60x60@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "60x60",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-60x60@3x.png",
+ "scale" : "3x"
+ },
+ {
+ "size" : "20x20",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-20x20@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "20x20",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-20x20@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-29x29@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-29x29@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-40x40@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-40x40@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "76x76",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-76x76@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "76x76",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-76x76@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "83.5x83.5",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-83.5x83.5@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "1024x1024",
+ "idiom" : "ios-marketing",
+ "filename" : "Icon-App-1024x1024@1x.png",
+ "scale" : "1x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
diff --git a/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
new file mode 100644
index 00000000..dc9ada47
Binary files /dev/null and b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ
diff --git a/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
new file mode 100644
index 00000000..7353c41e
Binary files /dev/null and b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ
diff --git a/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
new file mode 100644
index 00000000..797d452e
Binary files /dev/null and b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ
diff --git a/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
new file mode 100644
index 00000000..6ed2d933
Binary files /dev/null and b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ
diff --git a/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
new file mode 100644
index 00000000..4cd7b009
Binary files /dev/null and b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ
diff --git a/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
new file mode 100644
index 00000000..fe730945
Binary files /dev/null and b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ
diff --git a/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
new file mode 100644
index 00000000..321773cd
Binary files /dev/null and b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ
diff --git a/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
new file mode 100644
index 00000000..797d452e
Binary files /dev/null and b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ
diff --git a/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
new file mode 100644
index 00000000..502f463a
Binary files /dev/null and b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ
diff --git a/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
new file mode 100644
index 00000000..0ec30343
Binary files /dev/null and b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ
diff --git a/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
new file mode 100644
index 00000000..0ec30343
Binary files /dev/null and b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ
diff --git a/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
new file mode 100644
index 00000000..e9f5fea2
Binary files /dev/null and b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ
diff --git a/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
new file mode 100644
index 00000000..84ac32ae
Binary files /dev/null and b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ
diff --git a/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
new file mode 100644
index 00000000..8953cba0
Binary files /dev/null and b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ
diff --git a/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
new file mode 100644
index 00000000..0467bf12
Binary files /dev/null and b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ
diff --git a/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
new file mode 100644
index 00000000..0bedcf2f
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "filename" : "LaunchImage.png",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "LaunchImage@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "LaunchImage@3x.png",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
diff --git a/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
new file mode 100644
index 00000000..9da19eac
Binary files /dev/null and b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png differ
diff --git a/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
new file mode 100644
index 00000000..9da19eac
Binary files /dev/null and b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png differ
diff --git a/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
new file mode 100644
index 00000000..9da19eac
Binary files /dev/null and b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png differ
diff --git a/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
new file mode 100644
index 00000000..89c2725b
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
@@ -0,0 +1,5 @@
+# Launch Screen Assets
+
+You can customize the launch screen with your own desired assets by replacing the image files in this directory.
+
+You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
\ No newline at end of file
diff --git a/demos/firebase-nodejs-todolist/ios/Runner/Base.lproj/LaunchScreen.storyboard b/demos/firebase-nodejs-todolist/ios/Runner/Base.lproj/LaunchScreen.storyboard
new file mode 100644
index 00000000..f2e259c7
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/ios/Runner/Base.lproj/LaunchScreen.storyboard
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demos/firebase-nodejs-todolist/ios/Runner/Base.lproj/Main.storyboard b/demos/firebase-nodejs-todolist/ios/Runner/Base.lproj/Main.storyboard
new file mode 100644
index 00000000..f3c28516
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/ios/Runner/Base.lproj/Main.storyboard
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demos/firebase-nodejs-todolist/ios/Runner/GoogleService-Info.plist b/demos/firebase-nodejs-todolist/ios/Runner/GoogleService-Info.plist
new file mode 100644
index 00000000..87461c99
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/ios/Runner/GoogleService-Info.plist
@@ -0,0 +1,30 @@
+
+
+
+
+ API_KEY
+ AIzaSyAOcRgRnbZv_aXm4jukQnLR4YR1nFNL8eQ
+ GCM_SENDER_ID
+ 1069616552579
+ PLIST_VERSION
+ 1
+ BUNDLE_ID
+ co.powersync.demotodolist
+ PROJECT_ID
+ sample-firebase-ai-app-27d98
+ STORAGE_BUCKET
+ sample-firebase-ai-app-27d98.firebasestorage.app
+ IS_ADS_ENABLED
+
+ IS_ANALYTICS_ENABLED
+
+ IS_APPINVITE_ENABLED
+
+ IS_GCM_ENABLED
+
+ IS_SIGNIN_ENABLED
+
+ GOOGLE_APP_ID
+ 1:1069616552579:ios:0d30b90e81427c07db59b6
+
+
\ No newline at end of file
diff --git a/demos/firebase-nodejs-todolist/ios/Runner/Info.plist b/demos/firebase-nodejs-todolist/ios/Runner/Info.plist
new file mode 100644
index 00000000..b8ee5b63
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/ios/Runner/Info.plist
@@ -0,0 +1,51 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleDisplayName
+ Powersync Flutter Demo
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ powersync_flutter_demo
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ $(FLUTTER_BUILD_NAME)
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ $(FLUTTER_BUILD_NUMBER)
+ LSRequiresIPhoneOS
+
+ UILaunchStoryboardName
+ LaunchScreen
+ UIMainStoryboardFile
+ Main
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UIViewControllerBasedStatusBarAppearance
+
+ CADisableMinimumFrameDurationOnPhone
+
+ UIApplicationSupportsIndirectInputEvents
+
+
+
diff --git a/demos/firebase-nodejs-todolist/ios/Runner/Runner-Bridging-Header.h b/demos/firebase-nodejs-todolist/ios/Runner/Runner-Bridging-Header.h
new file mode 100644
index 00000000..308a2a56
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/ios/Runner/Runner-Bridging-Header.h
@@ -0,0 +1 @@
+#import "GeneratedPluginRegistrant.h"
diff --git a/demos/firebase-nodejs-todolist/ios/firebase_app_id_file.json b/demos/firebase-nodejs-todolist/ios/firebase_app_id_file.json
new file mode 100644
index 00000000..c70e242c
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/ios/firebase_app_id_file.json
@@ -0,0 +1,7 @@
+{
+ "file_generated_by": "FlutterFire CLI",
+ "purpose": "FirebaseAppID & ProjectID for this Firebase app in this directory",
+ "GOOGLE_APP_ID": "1:879921616597:ios:0d0afa4d1d1195410b745c",
+ "FIREBASE_PROJECT_ID": "kobie-powersync-testing",
+ "GCM_SENDER_ID": "879921616597"
+}
\ No newline at end of file
diff --git a/demos/firebase-nodejs-todolist/lib/app_config_template.dart b/demos/firebase-nodejs-todolist/lib/app_config_template.dart
new file mode 100644
index 00000000..6f558682
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/lib/app_config_template.dart
@@ -0,0 +1,6 @@
+// Copy this template: `cp lib/app_config_template.dart lib/app_config.dart`
+// Edit lib/app_config.dart and enter your details.
+class AppConfig {
+ static const String backendUrl = 'https://foo.supabase.co';
+ static const String powersyncUrl = 'https://foo.powersync.journeyapps.com';
+}
diff --git a/demos/firebase-nodejs-todolist/lib/firebase.dart b/demos/firebase-nodejs-todolist/lib/firebase.dart
new file mode 100644
index 00000000..030efeaf
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/lib/firebase.dart
@@ -0,0 +1,8 @@
+import 'package:firebase_core/firebase_core.dart';
+import 'firebase_options.dart';
+
+loadFirebase() async {
+ await Firebase.initializeApp(
+ options: DefaultFirebaseOptions.currentPlatform,
+ );
+}
diff --git a/demos/firebase-nodejs-todolist/lib/firebase_options.dart b/demos/firebase-nodejs-todolist/lib/firebase_options.dart
new file mode 100644
index 00000000..591ea9d6
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/lib/firebase_options.dart
@@ -0,0 +1,80 @@
+// File generated by FlutterFire CLI.
+// ignore_for_file: type=lint
+import 'package:firebase_core/firebase_core.dart' show FirebaseOptions;
+import 'package:flutter/foundation.dart'
+ show defaultTargetPlatform, kIsWeb, TargetPlatform;
+
+/// Default [FirebaseOptions] for use with your Firebase apps.
+///
+/// Example:
+/// ```dart
+/// import 'firebase_options.dart';
+/// // ...
+/// await Firebase.initializeApp(
+/// options: DefaultFirebaseOptions.currentPlatform,
+/// );
+/// ```
+class DefaultFirebaseOptions {
+ static FirebaseOptions get currentPlatform {
+ if (kIsWeb) {
+ throw UnsupportedError(
+ 'DefaultFirebaseOptions have not been configured for web - '
+ 'you can reconfigure this by running the FlutterFire CLI again.',
+ );
+ }
+ switch (defaultTargetPlatform) {
+ case TargetPlatform.android:
+ return android;
+ case TargetPlatform.iOS:
+ return ios;
+ case TargetPlatform.macOS:
+ return macos;
+ case TargetPlatform.windows:
+ return windows;
+ case TargetPlatform.linux:
+ throw UnsupportedError(
+ 'DefaultFirebaseOptions have not been configured for linux - '
+ 'you can reconfigure this by running the FlutterFire CLI again.',
+ );
+ default:
+ throw UnsupportedError(
+ 'DefaultFirebaseOptions are not supported for this platform.',
+ );
+ }
+ }
+
+ static const FirebaseOptions android = FirebaseOptions(
+ apiKey: 'AIzaSyDBk2GgaUqLvPWGe6cI0h6G4ZZweS2JKGE',
+ appId: '1:1069616552579:android:d2cb390fea186a49db59b6',
+ messagingSenderId: '1069616552579',
+ projectId: 'sample-firebase-ai-app-27d98',
+ storageBucket: 'sample-firebase-ai-app-27d98.firebasestorage.app',
+ );
+
+ static const FirebaseOptions ios = FirebaseOptions(
+ apiKey: 'AIzaSyAOcRgRnbZv_aXm4jukQnLR4YR1nFNL8eQ',
+ appId: '1:1069616552579:ios:0d30b90e81427c07db59b6',
+ messagingSenderId: '1069616552579',
+ projectId: 'sample-firebase-ai-app-27d98',
+ storageBucket: 'sample-firebase-ai-app-27d98.firebasestorage.app',
+ iosBundleId: 'co.powersync.demotodolist',
+ );
+
+ static const FirebaseOptions macos = FirebaseOptions(
+ apiKey: 'AIzaSyAOcRgRnbZv_aXm4jukQnLR4YR1nFNL8eQ',
+ appId: '1:1069616552579:ios:0d30b90e81427c07db59b6',
+ messagingSenderId: '1069616552579',
+ projectId: 'sample-firebase-ai-app-27d98',
+ storageBucket: 'sample-firebase-ai-app-27d98.firebasestorage.app',
+ iosBundleId: 'co.powersync.demotodolist',
+ );
+
+ static const FirebaseOptions windows = FirebaseOptions(
+ apiKey: 'AIzaSyCSsnrrJEu126-EL0MMpLbdmt44nBinONo',
+ appId: '1:1069616552579:web:795aadd36a32e2c5db59b6',
+ messagingSenderId: '1069616552579',
+ projectId: 'sample-firebase-ai-app-27d98',
+ authDomain: 'sample-firebase-ai-app-27d98.firebaseapp.com',
+ storageBucket: 'sample-firebase-ai-app-27d98.firebasestorage.app',
+ );
+}
diff --git a/demos/firebase-nodejs-todolist/lib/main.dart b/demos/firebase-nodejs-todolist/lib/main.dart
new file mode 100644
index 00000000..8a4bc617
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/lib/main.dart
@@ -0,0 +1,125 @@
+import 'package:flutter/foundation.dart';
+import 'package:flutter/material.dart';
+import 'package:logging/logging.dart';
+import './powersync.dart';
+
+import './widgets/lists_page.dart';
+import './widgets/login_page.dart';
+import './widgets/query_widget.dart';
+import './widgets/signup_page.dart';
+import './widgets/status_app_bar.dart';
+
+void main() async {
+ // Log info from PowerSync
+ Logger.root.level = Level.INFO;
+ Logger.root.onRecord.listen((record) {
+ if (kDebugMode) {
+ print(
+ '[${record.loggerName}] ${record.level.name}: ${record.time}: ${record.message}');
+
+ if (record.error != null) {
+ print(record.error);
+ }
+ if (record.stackTrace != null) {
+ print(record.stackTrace);
+ }
+ }
+ });
+
+ WidgetsFlutterBinding
+ .ensureInitialized(); //required to get sqlite filepath from path_provider before UI has initialized
+ await openDatabase();
+ final loggedIn = isLoggedIn();
+
+ runApp(MyApp(loggedIn: loggedIn));
+}
+
+const defaultQuery = 'SELECT * from todos';
+
+const listsPage = ListsPage();
+const homePage = listsPage;
+
+const sqlConsolePage = Scaffold(
+ appBar: StatusAppBar(title: Text('SQL Console')),
+ body: QueryWidget(defaultQuery: defaultQuery));
+
+const loginPage = LoginPage();
+
+const signupPage = SignupPage();
+
+class MyApp extends StatelessWidget {
+ final bool loggedIn;
+
+ const MyApp({super.key, required this.loggedIn});
+
+ @override
+ Widget build(BuildContext context) {
+ return MaterialApp(
+ title: 'PowerSync Flutter Demo',
+ theme: ThemeData(
+ primarySwatch: Colors.blue,
+ ),
+ home: loggedIn ? homePage : loginPage);
+ }
+}
+
+class MyHomePage extends StatelessWidget {
+ const MyHomePage(
+ {super.key,
+ required this.title,
+ required this.content,
+ this.floatingActionButton});
+
+ final String title;
+ final Widget content;
+ final Widget? floatingActionButton;
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ appBar: StatusAppBar(title: Text(title)),
+ body: Center(child: content),
+ floatingActionButton: floatingActionButton,
+ drawer: Drawer(
+ // Add a ListView to the drawer. This ensures the user can scroll
+ // through the options in the drawer if there isn't enough vertical
+ // space to fit everything.
+ child: ListView(
+ // Important: Remove any padding from the ListView.
+ padding: EdgeInsets.zero,
+ children: [
+ const DrawerHeader(
+ decoration: BoxDecoration(
+ color: Colors.blue,
+ ),
+ child: Text(''),
+ ),
+ ListTile(
+ title: const Text('SQL Console'),
+ onTap: () {
+ var navigator = Navigator.of(context);
+ navigator.pop();
+
+ navigator.push(MaterialPageRoute(
+ builder: (context) => sqlConsolePage,
+ ));
+ },
+ ),
+ ListTile(
+ title: const Text('Sign Out'),
+ onTap: () async {
+ var navigator = Navigator.of(context);
+ navigator.pop();
+ await logout();
+
+ navigator.pushReplacement(MaterialPageRoute(
+ builder: (context) => loginPage,
+ ));
+ },
+ ),
+ ],
+ ),
+ ),
+ );
+ }
+}
diff --git a/demos/firebase-nodejs-todolist/lib/models/schema.dart b/demos/firebase-nodejs-todolist/lib/models/schema.dart
new file mode 100644
index 00000000..6e18a2e2
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/lib/models/schema.dart
@@ -0,0 +1,18 @@
+import 'package:powersync/powersync.dart';
+
+const schema = Schema(([
+ Table('todos', [
+ Column.text('list_id'),
+ Column.text('created_at'),
+ Column.text('completed_at'),
+ Column.text('description'),
+ Column.integer('completed'),
+ Column.text('created_by'),
+ Column.text('completed_by'),
+ ], indexes: [
+ // Index to allow efficient lookup within a list
+ Index('list', [IndexedColumn('list_id')])
+ ]),
+ Table('lists',
+ [Column.text('created_at'), Column.text('name'), Column.text('owner_id')])
+]));
diff --git a/demos/firebase-nodejs-todolist/lib/models/todo_item.dart b/demos/firebase-nodejs-todolist/lib/models/todo_item.dart
new file mode 100644
index 00000000..270ff75a
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/lib/models/todo_item.dart
@@ -0,0 +1,38 @@
+import '../powersync.dart';
+import 'package:powersync/sqlite3.dart' as sqlite;
+
+/// TodoList represents a result row of a query on "todos".
+///
+/// This class is immutable - methods on this class do not modify the instance
+/// directly. Instead, watch or re-query the data to get the updated item.
+class TodoItem {
+ final String id;
+ final String description;
+ final bool completed;
+
+ TodoItem(
+ {required this.id, required this.description, required this.completed});
+
+ factory TodoItem.fromRow(sqlite.Row row) {
+ return TodoItem(
+ id: row['id'],
+ description: row['description'],
+ completed: row['completed'] == 1);
+ }
+
+ Future toggle() async {
+ if (completed) {
+ await db.execute(
+ 'UPDATE todos SET completed = FALSE, completed_by = NULL, completed_at = NULL WHERE id = ?',
+ [id]);
+ } else {
+ await db.execute(
+ 'UPDATE todos SET completed = TRUE, completed_by = ?, completed_at = datetime() WHERE id = ?',
+ [getUserId(), id]);
+ }
+ }
+
+ Future delete() async {
+ await db.execute('DELETE FROM todos WHERE id = ?', [id]);
+ }
+}
diff --git a/demos/firebase-nodejs-todolist/lib/models/todo_list.dart b/demos/firebase-nodejs-todolist/lib/models/todo_list.dart
new file mode 100644
index 00000000..2964954f
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/lib/models/todo_list.dart
@@ -0,0 +1,93 @@
+import 'package:powersync/sqlite3.dart' as sqlite;
+
+import './todo_item.dart';
+import '../powersync.dart';
+
+/// TodoList represents a result row of a query on "lists".
+///
+/// This class is immutable - methods on this class do not modify the instance
+/// directly. Instead, watch or re-query the data to get the updated list.
+class TodoList {
+ /// List id (UUID).
+ final String id;
+
+ /// Descriptive name.
+ final String name;
+
+ /// Number of completed todos in this list.
+ final int? completedCount;
+
+ /// Number of pending todos in this list.
+ final int? pendingCount;
+
+ TodoList(
+ {required this.id,
+ required this.name,
+ this.completedCount,
+ this.pendingCount});
+
+ factory TodoList.fromRow(sqlite.Row row) {
+ return TodoList(
+ id: row['id'],
+ name: row['name'],
+ completedCount: row['completed_count'],
+ pendingCount: row['pending_count']);
+ }
+
+ /// Watch all lists.
+ static Stream> watchLists() {
+ // This query is automatically re-run when data in "lists" or "todos" is modified.
+ return db.watch('SELECT * FROM lists ORDER BY created_at').map((results) {
+ return results.map(TodoList.fromRow).toList(growable: false);
+ });
+ }
+
+ /// Watch all lists, with [completedCount] and [pendingCount] populated.
+ static Stream> watchListsWithStats() {
+ // This query is automatically re-run when data in "lists" or "todos" is modified.
+ return db.watch('''
+SELECT
+ *,
+ (SELECT count() FROM todos WHERE list_id = lists.id AND completed = TRUE) as completed_count,
+ (SELECT count() FROM todos WHERE list_id = lists.id AND completed = FALSE) as pending_count
+FROM lists
+ORDER BY created_at
+''').map((results) {
+ return results.map(TodoList.fromRow).toList(growable: false);
+ });
+ }
+
+ /// Create a new list
+ static Future create(String name) async {
+ final userId = getUserId();
+ log.info('userId $userId');
+ final results = await db.execute('''INSERT INTO
+ lists(id, created_at, name, owner_id)
+ VALUES(uuid(), datetime(), ?, ?)
+ RETURNING *''', [name, userId]);
+ return TodoList.fromRow(results.first);
+ }
+
+ /// Watch items within this list.
+ Stream> watchItems() {
+ return db.watch(
+ 'SELECT * FROM todos WHERE list_id = ? ORDER BY created_at DESC',
+ parameters: [id]).map((event) {
+ return event.map(TodoItem.fromRow).toList(growable: false);
+ });
+ }
+
+ /// Delete this list.
+ Future delete() async {
+ await db.execute('DELETE FROM lists WHERE id = ?', [id]);
+ }
+
+ /// Add a new todo item to this list.
+ Future add(String description) async {
+ final results = await db.execute('''INSERT INTO
+ todos(id, created_at, completed, list_id, description, created_by)
+ VALUES(uuid(), datetime(), FALSE, ?, ?, ?)
+ RETURNING *''', [id, description, getUserId()]);
+ return TodoItem.fromRow(results.first);
+ }
+}
diff --git a/demos/firebase-nodejs-todolist/lib/powersync.dart b/demos/firebase-nodejs-todolist/lib/powersync.dart
new file mode 100644
index 00000000..54da5e90
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/lib/powersync.dart
@@ -0,0 +1,273 @@
+// This file performs setup of the PowerSync database
+import 'dart:convert';
+
+import 'package:firebase_auth/firebase_auth.dart';
+import 'package:logging/logging.dart';
+import 'package:path/path.dart';
+import 'package:path_provider/path_provider.dart';
+import 'package:powersync/powersync.dart';
+import 'package:http/http.dart' as http;
+
+import './app_config.dart';
+import './models/schema.dart';
+import './firebase.dart';
+
+final log = Logger('powersync-nodejs');
+
+/// Postgres Response codes that we cannot recover from by retrying.
+final List fatalResponseCodes = [
+ // Class 22 — Data Exception
+ // Examples include data type mismatch.
+ RegExp(r'^22...$'),
+ // Class 23 — Integrity Constraint Violation.
+ // Examples include NOT NULL, FOREIGN KEY and UNIQUE violations.
+ RegExp(r'^23...$'),
+ // INSUFFICIENT PRIVILEGE - typically a row-level security violation
+ RegExp(r'^42501$'),
+];
+
+/// Use Custom Node.js backend for authentication and data upload.
+class BackendConnector extends PowerSyncBackendConnector {
+ PowerSyncDatabase db;
+ //ignore: unused_field
+ Future? _refreshFuture;
+
+ BackendConnector(this.db);
+
+ /// Get a token to authenticate against the PowerSync instance.
+ @override
+ Future fetchCredentials() async {
+ final user = FirebaseAuth.instance.currentUser;
+ if (user == null) {
+ // Not logged in
+ return null;
+ }
+ final idToken = await user.getIdToken();
+
+ var url = Uri.parse("${AppConfig.backendUrl}/api/auth/token");
+
+ Map headers = {
+ 'Authorization': 'Bearer $idToken',
+ 'Content-Type': 'application/json', // Adjust content-type if needed
+ };
+
+ final response = await http.get(
+ url,
+ headers: headers,
+ );
+
+ if (response.statusCode == 200) {
+ final body = response.body;
+ Map parsedBody = jsonDecode(body);
+ // Use the access token to authenticate against PowerSync
+ // userId and expiresAt are for debugging purposes only
+ final expiresAt = parsedBody['expiresAt'] == null
+ ? null
+ : DateTime.fromMillisecondsSinceEpoch(
+ parsedBody['expiresAt']! * 1000);
+ return PowerSyncCredentials(
+ endpoint: parsedBody['powerSyncUrl'],
+ token: parsedBody['token'],
+ userId: parsedBody['userId'],
+ expiresAt: expiresAt);
+ } else {
+ print('Request failed with status: ${response.statusCode}');
+ return null;
+ }
+ }
+
+ @override
+ void invalidateCredentials() {
+ // Trigger a session refresh if auth fails on PowerSync.
+ // However, in some cases it can be a while before the session refresh is
+ // retried. We attempt to trigger the refresh as soon as we get an auth
+ // failure on PowerSync.
+ //
+ // This could happen if the device was offline for a while and the session
+ // expired, and nothing else attempt to use the session it in the meantime.
+ //
+ // Timeout the refresh call to avoid waiting for long retries,
+ // and ignore any errors. Errors will surface as expired tokens.
+ }
+
+ // Upload pending changes to Node.js Backend.
+ @override
+ Future uploadData(PowerSyncDatabase database) async {
+ // This function is called whenever there is data to upload, whether the
+ // device is online or offline.
+ // If this call throws an error, it is retried periodically.
+ final transaction = await database.getNextCrudTransaction();
+ if (transaction == null) {
+ return;
+ }
+
+ CrudEntry? lastOp;
+ try {
+ // Note: If transactional consistency is important, use database functions
+ // or edge functions to process the entire transaction in a single call.
+ for (var op in transaction.crud) {
+ lastOp = op;
+
+ var row = Map.of(op.opData!);
+ row['id'] = op.id;
+ Map data = {"table": op.table, "data": row};
+ if (op.op == UpdateType.put) {
+ await upsert(data);
+ } else if (op.op == UpdateType.patch) {
+ await update(data);
+ } else if (op.op == UpdateType.delete) {
+ data = {
+ "table": op.table,
+ "data": {"id": op.id}
+ };
+ await delete(data);
+ }
+ }
+
+ // All operations successful.
+ await transaction.complete();
+ } on http.ClientException catch (e) {
+ // Error may be retryable - e.g. network error or temporary server error.
+ // Throwing an error here causes this call to be retried after a delay.
+ log.warning('Client exception', e);
+ rethrow;
+ } catch (e) {
+ /// Instead of blocking the queue with these errors,
+ /// discard the (rest of the) transaction.
+ ///
+ /// Note that these errors typically indicate a bug in the application.
+ /// If protecting against data loss is important, save the failing records
+ /// elsewhere instead of discarding, and/or notify the user.
+ log.severe('Data upload error - discarding $lastOp', e);
+ await transaction.complete();
+ }
+ }
+}
+
+/// Global reference to the database
+late final PowerSyncDatabase db;
+
+upsert(data) async {
+ var url = Uri.parse("${AppConfig.backendUrl}/api/data");
+
+ try {
+ var response = await http.put(
+ url,
+ headers: {
+ 'Content-Type': 'application/json', // Adjust content-type if needed
+ },
+ body: jsonEncode(data), // Encode data to JSON
+ );
+
+ if (response.statusCode == 200) {
+ log.info('PUT request successful: ${response.body}');
+ } else {
+ log.severe('PUT request failed with status: ${response.statusCode}');
+ }
+ } catch (e) {
+ log.severe('Exception occurred: $e');
+ rethrow;
+ }
+}
+
+update(data) async {
+ var url = Uri.parse("${AppConfig.backendUrl}/api/data");
+
+ try {
+ var response = await http.patch(
+ url,
+ headers: {
+ 'Content-Type': 'application/json', // Adjust content-type if needed
+ },
+ body: jsonEncode(data), // Encode data to JSON
+ );
+
+ if (response.statusCode == 200) {
+ log.info('PUT request successful: ${response.body}');
+ } else {
+ log.severe('PUT request failed with status: ${response.statusCode}');
+ }
+ } catch (e) {
+ log.severe('Exception occurred: $e');
+ rethrow;
+ }
+}
+
+delete(data) async {
+ var url = Uri.parse("${AppConfig.backendUrl}/api/data");
+
+ try {
+ var response = await http.delete(
+ url,
+ headers: {
+ 'Content-Type': 'application/json', // Adjust content-type if needed
+ },
+ body: jsonEncode(data), // Encode data to JSON
+ );
+
+ if (response.statusCode == 200) {
+ log.info('DELETE request successful: ${response.body}');
+ } else {
+ log.severe('DELETE request failed with status: ${response.statusCode}');
+ }
+ } catch (e) {
+ log.severe('Exception occurred: $e');
+ rethrow;
+ }
+}
+
+isLoggedIn() {
+ final user = FirebaseAuth.instance.currentUser;
+ return user != null;
+}
+
+/// id of the user currently logged in
+String? getUserId() {
+ final user = FirebaseAuth.instance.currentUser;
+ return user!.uid;
+}
+
+Future getDatabasePath() async {
+ final dir = await getApplicationSupportDirectory();
+ return join(dir.path, 'powersync-demo.db');
+}
+
+Future openDatabase() async {
+ // Open the local database
+ db = PowerSyncDatabase(
+ schema: schema,
+ path: await getDatabasePath(),
+ logger: attachedLogger,
+ );
+ await db.initialize();
+ BackendConnector? currentConnector;
+
+ await loadFirebase();
+
+ final userLoggedIn = isLoggedIn();
+ if (userLoggedIn) {
+ // If the user is already logged in, connect immediately.
+ // Otherwise, connect once logged in.
+ currentConnector = BackendConnector(db);
+ db.connect(connector: currentConnector);
+ } else {
+ log.info('User not logged in, setting connection');
+ }
+
+ FirebaseAuth.instance.authStateChanges().listen((User? user) async {
+ if (user != null) {
+ // Connect to PowerSync when the user is signed in
+ currentConnector = BackendConnector(db);
+ db.connect(connector: currentConnector!);
+ } else {
+ currentConnector = null;
+ await db.disconnect();
+ }
+ });
+}
+
+/// Explicit sign out - clear database and log out.
+Future logout() async {
+ await FirebaseAuth.instance.signOut();
+ await db.disconnectAndClear();
+}
diff --git a/demos/supabase-todolist-drift/lib/widgets/list_item.dart b/demos/firebase-nodejs-todolist/lib/widgets/list_item.dart
similarity index 71%
rename from demos/supabase-todolist-drift/lib/widgets/list_item.dart
rename to demos/firebase-nodejs-todolist/lib/widgets/list_item.dart
index 19c5d798..31290db6 100644
--- a/demos/supabase-todolist-drift/lib/widgets/list_item.dart
+++ b/demos/firebase-nodejs-todolist/lib/widgets/list_item.dart
@@ -1,30 +1,22 @@
import 'package:flutter/material.dart';
-import 'package:supabase_todolist_drift/database.dart';
-import 'package:supabase_todolist_drift/powersync.dart';
-import 'todo_list_page.dart';
+import './todo_list_page.dart';
+import '../models/todo_list.dart';
class ListItemWidget extends StatelessWidget {
ListItemWidget({
required this.list,
}) : super(key: ObjectKey(list));
- final ListItemWithStats list;
+ final TodoList list;
Future delete() async {
// Server will take care of deleting related todos
- await appDb.deleteList(list.self);
+ await list.delete();
}
@override
Widget build(BuildContext context) {
- viewList() {
- var navigator = Navigator.of(context);
-
- navigator.push(MaterialPageRoute(
- builder: (context) => TodoListPage(list: list.self)));
- }
-
final subtext =
'${list.pendingCount} pending, ${list.completedCount} completed';
@@ -33,9 +25,12 @@ class ListItemWidget extends StatelessWidget {
mainAxisSize: MainAxisSize.min,
children: [
ListTile(
- onTap: viewList,
+ onTap: () {
+ Navigator.of(context).push(MaterialPageRoute(
+ builder: (context) => TodoListPage(list: list)));
+ },
leading: const Icon(Icons.list),
- title: Text(list.self.name),
+ title: Text(list.name),
subtitle: Text(subtext)),
Row(
mainAxisAlignment: MainAxisAlignment.end,
diff --git a/demos/supabase-todolist-drift/lib/widgets/list_item_dialog.dart b/demos/firebase-nodejs-todolist/lib/widgets/list_item_dialog.dart
similarity index 92%
rename from demos/supabase-todolist-drift/lib/widgets/list_item_dialog.dart
rename to demos/firebase-nodejs-todolist/lib/widgets/list_item_dialog.dart
index 50d0009c..3fb8c133 100644
--- a/demos/supabase-todolist-drift/lib/widgets/list_item_dialog.dart
+++ b/demos/firebase-nodejs-todolist/lib/widgets/list_item_dialog.dart
@@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
-import 'package:supabase_todolist_drift/powersync.dart';
+
+import '../models/todo_list.dart';
class ListItemDialog extends StatefulWidget {
const ListItemDialog({super.key});
@@ -22,7 +23,7 @@ class _ListItemDialogState extends State {
}
Future add() async {
- await appDb.createList(_textFieldController.text);
+ await TodoList.create(_textFieldController.text);
}
@override
diff --git a/demos/firebase-nodejs-todolist/lib/widgets/lists_page.dart b/demos/firebase-nodejs-todolist/lib/widgets/lists_page.dart
new file mode 100644
index 00000000..aba21fb2
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/lib/widgets/lists_page.dart
@@ -0,0 +1,71 @@
+import 'package:flutter/material.dart';
+
+import '../powersync.dart';
+import './list_item.dart';
+import './list_item_dialog.dart';
+import '../main.dart';
+import '../models/todo_list.dart';
+
+void _showAddDialog(BuildContext context) async {
+ return showDialog(
+ context: context,
+ barrierDismissible: false, // user must tap button!
+ builder: (BuildContext context) {
+ return const ListItemDialog();
+ },
+ );
+}
+
+class ListsPage extends StatelessWidget {
+ const ListsPage({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ const content = ListsWidget();
+
+ final button = FloatingActionButton(
+ onPressed: () {
+ _showAddDialog(context);
+ },
+ tooltip: 'Create List',
+ child: const Icon(Icons.add),
+ );
+
+ final page = MyHomePage(
+ title: 'Todo Lists',
+ content: content,
+ floatingActionButton: button,
+ );
+ return page;
+ }
+}
+
+class ListsWidget extends StatelessWidget {
+ const ListsWidget({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ return FutureBuilder(
+ future: db.waitForFirstSync(),
+ builder: (context, snapshot) {
+ return switch (snapshot.connectionState) {
+ ConnectionState.done => StreamBuilder(
+ stream: TodoList.watchListsWithStats(),
+ builder: (context, snapshot) {
+ final items = snapshot.data ?? const [];
+
+ return ListView(
+ padding: const EdgeInsets.symmetric(vertical: 8.0),
+ children: items.map((list) {
+ return ListItemWidget(list: list);
+ }).toList(),
+ );
+ },
+ ),
+ // waitForFirstSync() did not complete yet
+ _ => const Text('Busy with sync...'),
+ };
+ },
+ );
+ }
+}
diff --git a/demos/supabase-todolist-drift/lib/widgets/login_page.dart b/demos/firebase-nodejs-todolist/lib/widgets/login_page.dart
similarity index 88%
rename from demos/supabase-todolist-drift/lib/widgets/login_page.dart
rename to demos/firebase-nodejs-todolist/lib/widgets/login_page.dart
index f54f09da..8c30fd80 100644
--- a/demos/supabase-todolist-drift/lib/widgets/login_page.dart
+++ b/demos/firebase-nodejs-todolist/lib/widgets/login_page.dart
@@ -1,6 +1,5 @@
import 'package:flutter/material.dart';
-import 'package:supabase_flutter/supabase_flutter.dart';
-
+import 'package:firebase_auth/firebase_auth.dart';
import '../main.dart';
class LoginPage extends StatefulWidget {
@@ -31,18 +30,23 @@ class _LoginPageState extends State {
_error = null;
});
try {
- await Supabase.instance.client.auth.signInWithPassword(
+ await FirebaseAuth.instance.signInWithEmailAndPassword(
email: _usernameController.text, password: _passwordController.text);
-
if (context.mounted) {
Navigator.of(context).pushReplacement(MaterialPageRoute(
builder: (context) => listsPage,
));
}
- } on AuthException catch (e) {
- setState(() {
- _error = e.message;
- });
+ } on FirebaseAuthException catch (e) {
+ if (e.code == 'user-not-found') {
+ setState(() {
+ _error = 'No user found for that email.';
+ });
+ } else if (e.code == 'wrong-password') {
+ setState(() {
+ _error = 'Wrong password provided for that user.';
+ });
+ }
} catch (e) {
setState(() {
_error = e.toString();
@@ -71,7 +75,7 @@ class _LoginPageState extends State {
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
- const Text('Supabase Login'),
+ const Text('Firebase Email Login'),
const SizedBox(height: 35),
TextFormField(
controller: _usernameController,
diff --git a/demos/supabase-todolist-drift/lib/widgets/query_widget.dart b/demos/firebase-nodejs-todolist/lib/widgets/query_widget.dart
similarity index 94%
rename from demos/supabase-todolist-drift/lib/widgets/query_widget.dart
rename to demos/firebase-nodejs-todolist/lib/widgets/query_widget.dart
index a3ea9654..b9a285dd 100644
--- a/demos/supabase-todolist-drift/lib/widgets/query_widget.dart
+++ b/demos/firebase-nodejs-todolist/lib/widgets/query_widget.dart
@@ -1,9 +1,9 @@
import 'dart:async';
import 'package:flutter/material.dart';
-import 'package:powersync/sqlite3_common.dart' as sqlite;
+import 'package:powersync/sqlite3.dart' as sqlite;
-import 'resultset_table.dart';
+import './resultset_table.dart';
import '../powersync.dart';
class QueryWidget extends StatefulWidget {
@@ -46,7 +46,7 @@ class QueryWidgetState extends State {
_subscription?.cancel();
final stream = db.watch(_query);
_subscription = stream.listen((data) {
- if (!context.mounted) {
+ if (!mounted) {
return;
}
setState(() {
diff --git a/demos/supabase-todolist-drift/lib/widgets/resultset_table.dart b/demos/firebase-nodejs-todolist/lib/widgets/resultset_table.dart
similarity index 94%
rename from demos/supabase-todolist-drift/lib/widgets/resultset_table.dart
rename to demos/firebase-nodejs-todolist/lib/widgets/resultset_table.dart
index f348e4ff..b1606adf 100644
--- a/demos/supabase-todolist-drift/lib/widgets/resultset_table.dart
+++ b/demos/firebase-nodejs-todolist/lib/widgets/resultset_table.dart
@@ -1,5 +1,5 @@
import 'package:flutter/material.dart';
-import 'package:powersync/sqlite3_common.dart' as sqlite;
+import 'package:powersync/sqlite3.dart' as sqlite;
/// Stateless DataTable rendering results from a SQLite query
class ResultSetTable extends StatelessWidget {
diff --git a/demos/supabase-todolist-drift/lib/widgets/signup_page.dart b/demos/firebase-nodejs-todolist/lib/widgets/signup_page.dart
similarity index 82%
rename from demos/supabase-todolist-drift/lib/widgets/signup_page.dart
rename to demos/firebase-nodejs-todolist/lib/widgets/signup_page.dart
index 2f9150b4..48e7450e 100644
--- a/demos/supabase-todolist-drift/lib/widgets/signup_page.dart
+++ b/demos/firebase-nodejs-todolist/lib/widgets/signup_page.dart
@@ -1,6 +1,5 @@
import 'package:flutter/material.dart';
-import 'package:supabase_flutter/supabase_flutter.dart';
-
+import 'package:firebase_auth/firebase_auth.dart';
import '../main.dart';
class SignupPage extends StatefulWidget {
@@ -31,22 +30,25 @@ class _SignupPageState extends State {
_error = null;
});
try {
- final response = await Supabase.instance.client.auth.signUp(
- email: _usernameController.text, password: _passwordController.text);
-
+ await FirebaseAuth.instance.createUserWithEmailAndPassword(
+ email: _usernameController.text,
+ password: _passwordController.text,
+ );
if (context.mounted) {
- if (response.session != null) {
- Navigator.of(context).pushReplacement(MaterialPageRoute(
- builder: (context) => homePage,
- ));
- } else {
- Navigator.of(context).pop();
- }
+ Navigator.of(context).pushReplacement(MaterialPageRoute(
+ builder: (context) => homePage,
+ ));
+ }
+ } on FirebaseAuthException catch (e) {
+ if (e.code == 'weak-password') {
+ setState(() {
+ _error = 'The password provided is too weak.';
+ });
+ } else if (e.code == 'email-already-in-use') {
+ setState(() {
+ _error = 'The account already exists for that email.';
+ });
}
- } on AuthException catch (e) {
- setState(() {
- _error = e.message;
- });
} catch (e) {
setState(() {
_error = e.toString();
diff --git a/demos/firebase-nodejs-todolist/lib/widgets/status_app_bar.dart b/demos/firebase-nodejs-todolist/lib/widgets/status_app_bar.dart
new file mode 100644
index 00000000..19c1a025
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/lib/widgets/status_app_bar.dart
@@ -0,0 +1,67 @@
+import 'package:flutter/foundation.dart';
+import 'package:flutter/material.dart';
+import 'package:powersync/powersync.dart';
+import '../powersync.dart';
+
+class StatusAppBar extends StatelessWidget implements PreferredSizeWidget {
+ final Widget title;
+
+ const StatusAppBar({super.key, required this.title});
+
+ @override
+ Size get preferredSize => const Size.fromHeight(kToolbarHeight);
+
+ @override
+ Widget build(BuildContext context) {
+ return StreamBuilder(
+ stream: db.statusStream,
+ initialData: db.currentStatus,
+ builder: (context, snapshot) {
+ final status = snapshot.data!;
+ final statusIcon = _getStatusIcon(status);
+
+ return AppBar(
+ title: title,
+ actions: [
+ statusIcon,
+ // Make some space for the "Debug" banner, so that the status
+ // icon isn't hidden
+ if (kDebugMode) _makeIcon('Debug mode', Icons.developer_mode),
+ ],
+ );
+ },
+ );
+ }
+}
+
+Widget _makeIcon(String text, IconData icon) {
+ return Tooltip(
+ message: text,
+ child: SizedBox(width: 40, height: null, child: Icon(icon, size: 24)));
+}
+
+Widget _getStatusIcon(SyncStatus status) {
+ if (status.anyError != null) {
+ // The error message is verbose, could be replaced with something
+ // more user-friendly
+ if (!status.connected) {
+ return _makeIcon(status.anyError!.toString(), Icons.cloud_off);
+ } else {
+ return _makeIcon(status.anyError!.toString(), Icons.sync_problem);
+ }
+ } else if (status.connecting) {
+ return _makeIcon('Connecting', Icons.cloud_sync_outlined);
+ } else if (!status.connected) {
+ return _makeIcon('Not connected', Icons.cloud_off);
+ } else if (status.uploading && status.downloading) {
+ // The status changes often between downloading, uploading and both,
+ // so we use the same icon for all three
+ return _makeIcon('Uploading and downloading', Icons.cloud_sync_outlined);
+ } else if (status.uploading) {
+ return _makeIcon('Uploading', Icons.cloud_sync_outlined);
+ } else if (status.downloading) {
+ return _makeIcon('Downloading', Icons.cloud_sync_outlined);
+ } else {
+ return _makeIcon('Connected', Icons.cloud_queue);
+ }
+}
diff --git a/demos/supabase-todolist-drift/lib/widgets/todo_item_dialog.dart b/demos/firebase-nodejs-todolist/lib/widgets/todo_item_dialog.dart
similarity index 86%
rename from demos/supabase-todolist-drift/lib/widgets/todo_item_dialog.dart
rename to demos/firebase-nodejs-todolist/lib/widgets/todo_item_dialog.dart
index 269fcf65..641abd7f 100644
--- a/demos/supabase-todolist-drift/lib/widgets/todo_item_dialog.dart
+++ b/demos/firebase-nodejs-todolist/lib/widgets/todo_item_dialog.dart
@@ -1,9 +1,9 @@
import 'package:flutter/material.dart';
-import 'package:supabase_todolist_drift/database.dart';
-import 'package:supabase_todolist_drift/powersync.dart';
+
+import '../models/todo_list.dart';
class TodoItemDialog extends StatefulWidget {
- final ListItem list;
+ final TodoList list;
const TodoItemDialog({super.key, required this.list});
@@ -32,7 +32,7 @@ class _TodoItemDialogState extends State {
Future add() async {
Navigator.of(context).pop();
- await appDb.addTodo(widget.list, _textFieldController.text);
+ await widget.list.add(_textFieldController.text);
}
@override
diff --git a/demos/supabase-todolist-drift/lib/widgets/todo_item_widget.dart b/demos/firebase-nodejs-todolist/lib/widgets/todo_item_widget.dart
similarity index 53%
rename from demos/supabase-todolist-drift/lib/widgets/todo_item_widget.dart
rename to demos/firebase-nodejs-todolist/lib/widgets/todo_item_widget.dart
index 374e9e6f..2bb6050c 100644
--- a/demos/supabase-todolist-drift/lib/widgets/todo_item_widget.dart
+++ b/demos/firebase-nodejs-todolist/lib/widgets/todo_item_widget.dart
@@ -1,9 +1,6 @@
import 'package:flutter/material.dart';
-import 'package:supabase_todolist_drift/app_config.dart';
-import 'package:supabase_todolist_drift/attachments/photo_widget.dart';
-import 'package:supabase_todolist_drift/attachments/queue.dart';
-import 'package:supabase_todolist_drift/database.dart';
-import 'package:supabase_todolist_drift/powersync.dart';
+
+import '../models/todo_item.dart';
class TodoItemWidget extends StatelessWidget {
TodoItemWidget({
@@ -21,28 +18,21 @@ class TodoItemWidget extends StatelessWidget {
);
}
- Future deleteTodo(TodoItem todo) async {
- if (todo.photoId != null) {
- attachmentQueue.deleteFile(todo.photoId!);
- }
- await appDb.deleteTodo(todo);
- }
-
@override
Widget build(BuildContext context) {
return ListTile(
- onTap: () => appDb.toggleTodo(todo),
+ onTap: todo.toggle,
leading: Checkbox(
value: todo.completed,
onChanged: (_) {
- appDb.toggleTodo(todo);
+ todo.toggle();
},
),
title: Row(
children: [
Expanded(
child: Text(todo.description,
- style: _getTextStyle(todo.completed == true))),
+ style: _getTextStyle(todo.completed))),
IconButton(
iconSize: 30,
icon: const Icon(
@@ -50,12 +40,9 @@ class TodoItemWidget extends StatelessWidget {
color: Colors.red,
),
alignment: Alignment.centerRight,
- onPressed: () async => await deleteTodo(todo),
+ onPressed: todo.delete,
tooltip: 'Delete Item',
- ),
- AppConfig.supabaseStorageBucket.isEmpty
- ? Container()
- : PhotoWidget(todo: todo),
+ )
],
));
}
diff --git a/demos/firebase-nodejs-todolist/lib/widgets/todo_list_page.dart b/demos/firebase-nodejs-todolist/lib/widgets/todo_list_page.dart
new file mode 100644
index 00000000..a457eb98
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/lib/widgets/todo_list_page.dart
@@ -0,0 +1,61 @@
+import 'package:flutter/material.dart';
+
+import './status_app_bar.dart';
+import './todo_item_dialog.dart';
+import './todo_item_widget.dart';
+import '../models/todo_list.dart';
+
+void _showAddDialog(BuildContext context, TodoList list) async {
+ return showDialog(
+ context: context,
+ barrierDismissible: false, // user must tap button!
+ builder: (BuildContext context) {
+ return TodoItemDialog(list: list);
+ },
+ );
+}
+
+class TodoListPage extends StatelessWidget {
+ final TodoList list;
+
+ const TodoListPage({super.key, required this.list});
+
+ @override
+ Widget build(BuildContext context) {
+ final button = FloatingActionButton(
+ onPressed: () {
+ _showAddDialog(context, list);
+ },
+ tooltip: 'Add Item',
+ child: const Icon(Icons.add),
+ );
+
+ return Scaffold(
+ appBar: StatusAppBar(title: Text(list.name)),
+ floatingActionButton: button,
+ body: TodoListWidget(list: list));
+ }
+}
+
+class TodoListWidget extends StatelessWidget {
+ final TodoList list;
+
+ const TodoListWidget({super.key, required this.list});
+
+ @override
+ Widget build(BuildContext context) {
+ return StreamBuilder(
+ stream: list.watchItems(),
+ builder: (context, snapshot) {
+ final items = snapshot.data ?? const [];
+
+ return ListView(
+ padding: const EdgeInsets.symmetric(vertical: 8.0),
+ children: items.map((todo) {
+ return TodoItemWidget(todo: todo);
+ }).toList(),
+ );
+ },
+ );
+ }
+}
diff --git a/demos/firebase-nodejs-todolist/linux/.gitignore b/demos/firebase-nodejs-todolist/linux/.gitignore
new file mode 100644
index 00000000..d3896c98
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/linux/.gitignore
@@ -0,0 +1 @@
+flutter/ephemeral
diff --git a/demos/firebase-nodejs-todolist/linux/CMakeLists.txt b/demos/firebase-nodejs-todolist/linux/CMakeLists.txt
new file mode 100644
index 00000000..df0a3887
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/linux/CMakeLists.txt
@@ -0,0 +1,138 @@
+# Project-level configuration.
+cmake_minimum_required(VERSION 3.10)
+project(runner LANGUAGES CXX)
+
+# The name of the executable created for the application. Change this to change
+# the on-disk name of your application.
+set(BINARY_NAME "powersync_supabase_demo")
+# The unique GTK application identifier for this application. See:
+# https://wiki.gnome.org/HowDoI/ChooseApplicationID
+set(APPLICATION_ID "co.powersync.demotodolist")
+
+# Explicitly opt in to modern CMake behaviors to avoid warnings with recent
+# versions of CMake.
+cmake_policy(SET CMP0063 NEW)
+
+# Load bundled libraries from the lib/ directory relative to the binary.
+set(CMAKE_INSTALL_RPATH "$ORIGIN/lib")
+
+# Root filesystem for cross-building.
+if(FLUTTER_TARGET_PLATFORM_SYSROOT)
+ set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT})
+ set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT})
+ set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+ set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
+ set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+ set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+endif()
+
+# Define build configuration options.
+if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
+ set(CMAKE_BUILD_TYPE "Debug" CACHE
+ STRING "Flutter build mode" FORCE)
+ set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
+ "Debug" "Profile" "Release")
+endif()
+
+# Compilation settings that should be applied to most targets.
+#
+# Be cautious about adding new options here, as plugins use this function by
+# default. In most cases, you should add new options to specific targets instead
+# of modifying this function.
+function(APPLY_STANDARD_SETTINGS TARGET)
+ target_compile_features(${TARGET} PUBLIC cxx_std_14)
+ target_compile_options(${TARGET} PRIVATE -Wall -Werror)
+ target_compile_options(${TARGET} PRIVATE "$<$>:-O3>")
+ target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>")
+endfunction()
+
+# Flutter library and tool build rules.
+set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter")
+add_subdirectory(${FLUTTER_MANAGED_DIR})
+
+# System-level dependencies.
+find_package(PkgConfig REQUIRED)
+pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0)
+
+add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}")
+
+# Define the application target. To change its name, change BINARY_NAME above,
+# not the value here, or `flutter run` will no longer work.
+#
+# Any new source files that you add to the application should be added here.
+add_executable(${BINARY_NAME}
+ "main.cc"
+ "my_application.cc"
+ "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc"
+)
+
+# Apply the standard set of build settings. This can be removed for applications
+# that need different build settings.
+apply_standard_settings(${BINARY_NAME})
+
+# Add dependency libraries. Add any application-specific dependencies here.
+target_link_libraries(${BINARY_NAME} PRIVATE flutter)
+target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK)
+
+# Run the Flutter tool portions of the build. This must not be removed.
+add_dependencies(${BINARY_NAME} flutter_assemble)
+
+# Only the install-generated bundle's copy of the executable will launch
+# correctly, since the resources must in the right relative locations. To avoid
+# people trying to run the unbundled copy, put it in a subdirectory instead of
+# the default top-level location.
+set_target_properties(${BINARY_NAME}
+ PROPERTIES
+ RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run"
+)
+
+# Generated plugin build rules, which manage building the plugins and adding
+# them to the application.
+include(flutter/generated_plugins.cmake)
+
+
+# === Installation ===
+# By default, "installing" just makes a relocatable bundle in the build
+# directory.
+set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle")
+if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
+ set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE)
+endif()
+
+# Start with a clean build bundle directory every time.
+install(CODE "
+ file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\")
+ " COMPONENT Runtime)
+
+set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data")
+set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib")
+
+install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}"
+ COMPONENT Runtime)
+
+install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}"
+ COMPONENT Runtime)
+
+install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
+ COMPONENT Runtime)
+
+foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES})
+ install(FILES "${bundled_library}"
+ DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
+ COMPONENT Runtime)
+endforeach(bundled_library)
+
+# Fully re-copy the assets directory on each build to avoid having stale files
+# from a previous install.
+set(FLUTTER_ASSET_DIR_NAME "flutter_assets")
+install(CODE "
+ file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\")
+ " COMPONENT Runtime)
+install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}"
+ DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime)
+
+# Install the AOT library on non-Debug builds only.
+if(NOT CMAKE_BUILD_TYPE MATCHES "Debug")
+ install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
+ COMPONENT Runtime)
+endif()
diff --git a/demos/firebase-nodejs-todolist/linux/flutter/CMakeLists.txt b/demos/firebase-nodejs-todolist/linux/flutter/CMakeLists.txt
new file mode 100644
index 00000000..d5bd0164
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/linux/flutter/CMakeLists.txt
@@ -0,0 +1,88 @@
+# This file controls Flutter-level build steps. It should not be edited.
+cmake_minimum_required(VERSION 3.10)
+
+set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral")
+
+# Configuration provided via flutter tool.
+include(${EPHEMERAL_DIR}/generated_config.cmake)
+
+# TODO: Move the rest of this into files in ephemeral. See
+# https://github.com/flutter/flutter/issues/57146.
+
+# Serves the same purpose as list(TRANSFORM ... PREPEND ...),
+# which isn't available in 3.10.
+function(list_prepend LIST_NAME PREFIX)
+ set(NEW_LIST "")
+ foreach(element ${${LIST_NAME}})
+ list(APPEND NEW_LIST "${PREFIX}${element}")
+ endforeach(element)
+ set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE)
+endfunction()
+
+# === Flutter Library ===
+# System-level dependencies.
+find_package(PkgConfig REQUIRED)
+pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0)
+pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0)
+pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0)
+
+set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so")
+
+# Published to parent scope for install step.
+set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE)
+set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE)
+set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE)
+set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE)
+
+list(APPEND FLUTTER_LIBRARY_HEADERS
+ "fl_basic_message_channel.h"
+ "fl_binary_codec.h"
+ "fl_binary_messenger.h"
+ "fl_dart_project.h"
+ "fl_engine.h"
+ "fl_json_message_codec.h"
+ "fl_json_method_codec.h"
+ "fl_message_codec.h"
+ "fl_method_call.h"
+ "fl_method_channel.h"
+ "fl_method_codec.h"
+ "fl_method_response.h"
+ "fl_plugin_registrar.h"
+ "fl_plugin_registry.h"
+ "fl_standard_message_codec.h"
+ "fl_standard_method_codec.h"
+ "fl_string_codec.h"
+ "fl_value.h"
+ "fl_view.h"
+ "flutter_linux.h"
+)
+list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/")
+add_library(flutter INTERFACE)
+target_include_directories(flutter INTERFACE
+ "${EPHEMERAL_DIR}"
+)
+target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}")
+target_link_libraries(flutter INTERFACE
+ PkgConfig::GTK
+ PkgConfig::GLIB
+ PkgConfig::GIO
+)
+add_dependencies(flutter flutter_assemble)
+
+# === Flutter tool backend ===
+# _phony_ is a non-existent file to force this command to run every time,
+# since currently there's no way to get a full input/output list from the
+# flutter tool.
+add_custom_command(
+ OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS}
+ ${CMAKE_CURRENT_BINARY_DIR}/_phony_
+ COMMAND ${CMAKE_COMMAND} -E env
+ ${FLUTTER_TOOL_ENVIRONMENT}
+ "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh"
+ ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE}
+ VERBATIM
+)
+add_custom_target(flutter_assemble DEPENDS
+ "${FLUTTER_LIBRARY}"
+ ${FLUTTER_LIBRARY_HEADERS}
+)
diff --git a/demos/firebase-nodejs-todolist/linux/flutter/generated_plugin_registrant.cc b/demos/firebase-nodejs-todolist/linux/flutter/generated_plugin_registrant.cc
new file mode 100644
index 00000000..1bef6a30
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/linux/flutter/generated_plugin_registrant.cc
@@ -0,0 +1,27 @@
+//
+// Generated file. Do not edit.
+//
+
+// clang-format off
+
+#include "generated_plugin_registrant.h"
+
+#include
+#include
+#include
+#include
+
+void fl_register_plugins(FlPluginRegistry* registry) {
+ g_autoptr(FlPluginRegistrar) gtk_registrar =
+ fl_plugin_registry_get_registrar_for_plugin(registry, "GtkPlugin");
+ gtk_plugin_register_with_registrar(gtk_registrar);
+ g_autoptr(FlPluginRegistrar) powersync_flutter_libs_registrar =
+ fl_plugin_registry_get_registrar_for_plugin(registry, "PowersyncFlutterLibsPlugin");
+ powersync_flutter_libs_plugin_register_with_registrar(powersync_flutter_libs_registrar);
+ g_autoptr(FlPluginRegistrar) sqlite3_flutter_libs_registrar =
+ fl_plugin_registry_get_registrar_for_plugin(registry, "Sqlite3FlutterLibsPlugin");
+ sqlite3_flutter_libs_plugin_register_with_registrar(sqlite3_flutter_libs_registrar);
+ g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar =
+ fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin");
+ url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar);
+}
diff --git a/demos/firebase-nodejs-todolist/linux/flutter/generated_plugin_registrant.h b/demos/firebase-nodejs-todolist/linux/flutter/generated_plugin_registrant.h
new file mode 100644
index 00000000..e0f0a47b
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/linux/flutter/generated_plugin_registrant.h
@@ -0,0 +1,15 @@
+//
+// Generated file. Do not edit.
+//
+
+// clang-format off
+
+#ifndef GENERATED_PLUGIN_REGISTRANT_
+#define GENERATED_PLUGIN_REGISTRANT_
+
+#include
+
+// Registers Flutter plugins.
+void fl_register_plugins(FlPluginRegistry* registry);
+
+#endif // GENERATED_PLUGIN_REGISTRANT_
diff --git a/demos/firebase-nodejs-todolist/linux/flutter/generated_plugins.cmake b/demos/firebase-nodejs-todolist/linux/flutter/generated_plugins.cmake
new file mode 100644
index 00000000..ed77a1a0
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/linux/flutter/generated_plugins.cmake
@@ -0,0 +1,27 @@
+#
+# Generated file, do not edit.
+#
+
+list(APPEND FLUTTER_PLUGIN_LIST
+ gtk
+ powersync_flutter_libs
+ sqlite3_flutter_libs
+ url_launcher_linux
+)
+
+list(APPEND FLUTTER_FFI_PLUGIN_LIST
+)
+
+set(PLUGIN_BUNDLED_LIBRARIES)
+
+foreach(plugin ${FLUTTER_PLUGIN_LIST})
+ add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin})
+ target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin)
+ list(APPEND PLUGIN_BUNDLED_LIBRARIES $)
+ list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries})
+endforeach(plugin)
+
+foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST})
+ add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin})
+ list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries})
+endforeach(ffi_plugin)
diff --git a/demos/firebase-nodejs-todolist/linux/main.cc b/demos/firebase-nodejs-todolist/linux/main.cc
new file mode 100644
index 00000000..e7c5c543
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/linux/main.cc
@@ -0,0 +1,6 @@
+#include "my_application.h"
+
+int main(int argc, char** argv) {
+ g_autoptr(MyApplication) app = my_application_new();
+ return g_application_run(G_APPLICATION(app), argc, argv);
+}
diff --git a/demos/firebase-nodejs-todolist/linux/my_application.cc b/demos/firebase-nodejs-todolist/linux/my_application.cc
new file mode 100644
index 00000000..7dcb7e37
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/linux/my_application.cc
@@ -0,0 +1,104 @@
+#include "my_application.h"
+
+#include
+#ifdef GDK_WINDOWING_X11
+#include
+#endif
+
+#include "flutter/generated_plugin_registrant.h"
+
+struct _MyApplication {
+ GtkApplication parent_instance;
+ char** dart_entrypoint_arguments;
+};
+
+G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION)
+
+// Implements GApplication::activate.
+static void my_application_activate(GApplication* application) {
+ MyApplication* self = MY_APPLICATION(application);
+ GtkWindow* window =
+ GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application)));
+
+ // Use a header bar when running in GNOME as this is the common style used
+ // by applications and is the setup most users will be using (e.g. Ubuntu
+ // desktop).
+ // If running on X and not using GNOME then just use a traditional title bar
+ // in case the window manager does more exotic layout, e.g. tiling.
+ // If running on Wayland assume the header bar will work (may need changing
+ // if future cases occur).
+ gboolean use_header_bar = TRUE;
+#ifdef GDK_WINDOWING_X11
+ GdkScreen* screen = gtk_window_get_screen(window);
+ if (GDK_IS_X11_SCREEN(screen)) {
+ const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen);
+ if (g_strcmp0(wm_name, "GNOME Shell") != 0) {
+ use_header_bar = FALSE;
+ }
+ }
+#endif
+ if (use_header_bar) {
+ GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new());
+ gtk_widget_show(GTK_WIDGET(header_bar));
+ gtk_header_bar_set_title(header_bar, "PowerSync Flutter Demo");
+ gtk_header_bar_set_show_close_button(header_bar, TRUE);
+ gtk_window_set_titlebar(window, GTK_WIDGET(header_bar));
+ } else {
+ gtk_window_set_title(window, "PowerSync Flutter Demo");
+ }
+
+ gtk_window_set_default_size(window, 1280, 720);
+ gtk_widget_show(GTK_WIDGET(window));
+
+ g_autoptr(FlDartProject) project = fl_dart_project_new();
+ fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments);
+
+ FlView* view = fl_view_new(project);
+ gtk_widget_show(GTK_WIDGET(view));
+ gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view));
+
+ fl_register_plugins(FL_PLUGIN_REGISTRY(view));
+
+ gtk_widget_grab_focus(GTK_WIDGET(view));
+}
+
+// Implements GApplication::local_command_line.
+static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) {
+ MyApplication* self = MY_APPLICATION(application);
+ // Strip out the first argument as it is the binary name.
+ self->dart_entrypoint_arguments = g_strdupv(*arguments + 1);
+
+ g_autoptr(GError) error = nullptr;
+ if (!g_application_register(application, nullptr, &error)) {
+ g_warning("Failed to register: %s", error->message);
+ *exit_status = 1;
+ return TRUE;
+ }
+
+ g_application_activate(application);
+ *exit_status = 0;
+
+ return TRUE;
+}
+
+// Implements GObject::dispose.
+static void my_application_dispose(GObject* object) {
+ MyApplication* self = MY_APPLICATION(object);
+ g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev);
+ G_OBJECT_CLASS(my_application_parent_class)->dispose(object);
+}
+
+static void my_application_class_init(MyApplicationClass* klass) {
+ G_APPLICATION_CLASS(klass)->activate = my_application_activate;
+ G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line;
+ G_OBJECT_CLASS(klass)->dispose = my_application_dispose;
+}
+
+static void my_application_init(MyApplication* self) {}
+
+MyApplication* my_application_new() {
+ return MY_APPLICATION(g_object_new(my_application_get_type(),
+ "application-id", APPLICATION_ID,
+ "flags", G_APPLICATION_NON_UNIQUE,
+ nullptr));
+}
diff --git a/demos/firebase-nodejs-todolist/linux/my_application.h b/demos/firebase-nodejs-todolist/linux/my_application.h
new file mode 100644
index 00000000..72271d5e
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/linux/my_application.h
@@ -0,0 +1,18 @@
+#ifndef FLUTTER_MY_APPLICATION_H_
+#define FLUTTER_MY_APPLICATION_H_
+
+#include
+
+G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION,
+ GtkApplication)
+
+/**
+ * my_application_new:
+ *
+ * Creates a new Flutter-based application.
+ *
+ * Returns: a new #MyApplication.
+ */
+MyApplication* my_application_new();
+
+#endif // FLUTTER_MY_APPLICATION_H_
diff --git a/demos/firebase-nodejs-todolist/macos/.gitignore b/demos/firebase-nodejs-todolist/macos/.gitignore
new file mode 100644
index 00000000..746adbb6
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/macos/.gitignore
@@ -0,0 +1,7 @@
+# Flutter-related
+**/Flutter/ephemeral/
+**/Pods/
+
+# Xcode-related
+**/dgph
+**/xcuserdata/
diff --git a/demos/firebase-nodejs-todolist/macos/Flutter/Flutter-Debug.xcconfig b/demos/firebase-nodejs-todolist/macos/Flutter/Flutter-Debug.xcconfig
new file mode 100644
index 00000000..4b81f9b2
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/macos/Flutter/Flutter-Debug.xcconfig
@@ -0,0 +1,2 @@
+#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
+#include "ephemeral/Flutter-Generated.xcconfig"
diff --git a/demos/firebase-nodejs-todolist/macos/Flutter/Flutter-Release.xcconfig b/demos/firebase-nodejs-todolist/macos/Flutter/Flutter-Release.xcconfig
new file mode 100644
index 00000000..5caa9d15
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/macos/Flutter/Flutter-Release.xcconfig
@@ -0,0 +1,2 @@
+#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
+#include "ephemeral/Flutter-Generated.xcconfig"
diff --git a/demos/firebase-nodejs-todolist/macos/Flutter/GeneratedPluginRegistrant.swift b/demos/firebase-nodejs-todolist/macos/Flutter/GeneratedPluginRegistrant.swift
new file mode 100644
index 00000000..e113183e
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/macos/Flutter/GeneratedPluginRegistrant.swift
@@ -0,0 +1,26 @@
+//
+// Generated file. Do not edit.
+//
+
+import FlutterMacOS
+import Foundation
+
+import app_links
+import firebase_auth
+import firebase_core
+import path_provider_foundation
+import powersync_flutter_libs
+import shared_preferences_foundation
+import sqlite3_flutter_libs
+import url_launcher_macos
+
+func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
+ AppLinksMacosPlugin.register(with: registry.registrar(forPlugin: "AppLinksMacosPlugin"))
+ FLTFirebaseAuthPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseAuthPlugin"))
+ FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin"))
+ PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
+ PowersyncFlutterLibsPlugin.register(with: registry.registrar(forPlugin: "PowersyncFlutterLibsPlugin"))
+ SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
+ Sqlite3FlutterLibsPlugin.register(with: registry.registrar(forPlugin: "Sqlite3FlutterLibsPlugin"))
+ UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
+}
diff --git a/demos/firebase-nodejs-todolist/macos/Podfile b/demos/firebase-nodejs-todolist/macos/Podfile
new file mode 100644
index 00000000..b52666a1
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/macos/Podfile
@@ -0,0 +1,43 @@
+platform :osx, '10.15'
+
+# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
+ENV['COCOAPODS_DISABLE_STATS'] = 'true'
+
+project 'Runner', {
+ 'Debug' => :debug,
+ 'Profile' => :release,
+ 'Release' => :release,
+}
+
+def flutter_root
+ generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__)
+ unless File.exist?(generated_xcode_build_settings_path)
+ raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first"
+ end
+
+ File.foreach(generated_xcode_build_settings_path) do |line|
+ matches = line.match(/FLUTTER_ROOT\=(.*)/)
+ return matches[1].strip if matches
+ end
+ raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\""
+end
+
+require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
+
+flutter_macos_podfile_setup
+
+target 'Runner' do
+ use_frameworks!
+ use_modular_headers!
+
+ flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__))
+ target 'RunnerTests' do
+ inherit! :search_paths
+ end
+end
+
+post_install do |installer|
+ installer.pods_project.targets.each do |target|
+ flutter_additional_macos_build_settings(target)
+ end
+end
diff --git a/demos/firebase-nodejs-todolist/macos/Podfile.lock b/demos/firebase-nodejs-todolist/macos/Podfile.lock
new file mode 100644
index 00000000..fc4bb3aa
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/macos/Podfile.lock
@@ -0,0 +1,163 @@
+PODS:
+ - app_links (1.0.0):
+ - FlutterMacOS
+ - Firebase/Auth (11.10.0):
+ - Firebase/CoreOnly
+ - FirebaseAuth (~> 11.10.0)
+ - Firebase/CoreOnly (11.10.0):
+ - FirebaseCore (~> 11.10.0)
+ - firebase_auth (5.5.3):
+ - Firebase/Auth (~> 11.10.0)
+ - Firebase/CoreOnly (~> 11.10.0)
+ - firebase_core
+ - FlutterMacOS
+ - firebase_core (3.13.0):
+ - Firebase/CoreOnly (~> 11.10.0)
+ - FlutterMacOS
+ - FirebaseAppCheckInterop (11.15.0)
+ - FirebaseAuth (11.10.0):
+ - FirebaseAppCheckInterop (~> 11.0)
+ - FirebaseAuthInterop (~> 11.0)
+ - FirebaseCore (~> 11.10.0)
+ - FirebaseCoreExtension (~> 11.10.0)
+ - GoogleUtilities/AppDelegateSwizzler (~> 8.0)
+ - GoogleUtilities/Environment (~> 8.0)
+ - GTMSessionFetcher/Core (< 5.0, >= 3.4)
+ - RecaptchaInterop (~> 101.0)
+ - FirebaseAuthInterop (11.15.0)
+ - FirebaseCore (11.10.0):
+ - FirebaseCoreInternal (~> 11.10.0)
+ - GoogleUtilities/Environment (~> 8.0)
+ - GoogleUtilities/Logger (~> 8.0)
+ - FirebaseCoreExtension (11.10.0):
+ - FirebaseCore (~> 11.10.0)
+ - FirebaseCoreInternal (11.10.0):
+ - "GoogleUtilities/NSData+zlib (~> 8.0)"
+ - FlutterMacOS (1.0.0)
+ - GoogleUtilities/AppDelegateSwizzler (8.1.0):
+ - GoogleUtilities/Environment
+ - GoogleUtilities/Logger
+ - GoogleUtilities/Network
+ - GoogleUtilities/Privacy
+ - GoogleUtilities/Environment (8.1.0):
+ - GoogleUtilities/Privacy
+ - GoogleUtilities/Logger (8.1.0):
+ - GoogleUtilities/Environment
+ - GoogleUtilities/Privacy
+ - GoogleUtilities/Network (8.1.0):
+ - GoogleUtilities/Logger
+ - "GoogleUtilities/NSData+zlib"
+ - GoogleUtilities/Privacy
+ - GoogleUtilities/Reachability
+ - "GoogleUtilities/NSData+zlib (8.1.0)":
+ - GoogleUtilities/Privacy
+ - GoogleUtilities/Privacy (8.1.0)
+ - GoogleUtilities/Reachability (8.1.0):
+ - GoogleUtilities/Logger
+ - GoogleUtilities/Privacy
+ - GTMSessionFetcher/Core (4.5.0)
+ - path_provider_foundation (0.0.1):
+ - Flutter
+ - FlutterMacOS
+ - powersync-sqlite-core (0.4.5)
+ - powersync_flutter_libs (0.0.1):
+ - FlutterMacOS
+ - powersync-sqlite-core (~> 0.4.5)
+ - shared_preferences_foundation (0.0.1):
+ - Flutter
+ - FlutterMacOS
+ - sqlite3 (3.49.2):
+ - sqlite3/common (= 3.49.2)
+ - sqlite3/common (3.49.2)
+ - sqlite3/dbstatvtab (3.49.2):
+ - sqlite3/common
+ - sqlite3/fts5 (3.49.2):
+ - sqlite3/common
+ - sqlite3/math (3.49.2):
+ - sqlite3/common
+ - sqlite3/perf-threadsafe (3.49.2):
+ - sqlite3/common
+ - sqlite3/rtree (3.49.2):
+ - sqlite3/common
+ - sqlite3_flutter_libs (0.0.1):
+ - Flutter
+ - FlutterMacOS
+ - sqlite3 (~> 3.49.1)
+ - sqlite3/dbstatvtab
+ - sqlite3/fts5
+ - sqlite3/math
+ - sqlite3/perf-threadsafe
+ - sqlite3/rtree
+ - url_launcher_macos (0.0.1):
+ - FlutterMacOS
+
+DEPENDENCIES:
+ - app_links (from `Flutter/ephemeral/.symlinks/plugins/app_links/macos`)
+ - firebase_auth (from `Flutter/ephemeral/.symlinks/plugins/firebase_auth/macos`)
+ - firebase_core (from `Flutter/ephemeral/.symlinks/plugins/firebase_core/macos`)
+ - FlutterMacOS (from `Flutter/ephemeral`)
+ - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`)
+ - powersync_flutter_libs (from `Flutter/ephemeral/.symlinks/plugins/powersync_flutter_libs/macos`)
+ - shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`)
+ - sqlite3_flutter_libs (from `Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/darwin`)
+ - url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`)
+
+SPEC REPOS:
+ trunk:
+ - Firebase
+ - FirebaseAppCheckInterop
+ - FirebaseAuth
+ - FirebaseAuthInterop
+ - FirebaseCore
+ - FirebaseCoreExtension
+ - FirebaseCoreInternal
+ - GoogleUtilities
+ - GTMSessionFetcher
+ - powersync-sqlite-core
+ - sqlite3
+
+EXTERNAL SOURCES:
+ app_links:
+ :path: Flutter/ephemeral/.symlinks/plugins/app_links/macos
+ firebase_auth:
+ :path: Flutter/ephemeral/.symlinks/plugins/firebase_auth/macos
+ firebase_core:
+ :path: Flutter/ephemeral/.symlinks/plugins/firebase_core/macos
+ FlutterMacOS:
+ :path: Flutter/ephemeral
+ path_provider_foundation:
+ :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin
+ powersync_flutter_libs:
+ :path: Flutter/ephemeral/.symlinks/plugins/powersync_flutter_libs/macos
+ shared_preferences_foundation:
+ :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin
+ sqlite3_flutter_libs:
+ :path: Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/darwin
+ url_launcher_macos:
+ :path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos
+
+SPEC CHECKSUMS:
+ app_links: afe860c55c7ef176cea7fb630a2b7d7736de591d
+ Firebase: 1fe1c0a7d9aaea32efe01fbea5f0ebd8d70e53a2
+ firebase_auth: d9a868727e64a42540f791ffb5a656afa0c29a58
+ firebase_core: efd50ad8177dc489af1b9163a560359cf1b30597
+ FirebaseAppCheckInterop: 06fe5a3799278ae4667e6c432edd86b1030fa3df
+ FirebaseAuth: c4146bdfdc87329f9962babd24dae89373f49a32
+ FirebaseAuthInterop: 7087d7a4ee4bc4de019b2d0c240974ed5d89e2fd
+ FirebaseCore: 8344daef5e2661eb004b177488d6f9f0f24251b7
+ FirebaseCoreExtension: 6f357679327f3614e995dc7cf3f2d600bdc774ac
+ FirebaseCoreInternal: ef4505d2afb1d0ebbc33162cb3795382904b5679
+ FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1
+ GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1
+ GTMSessionFetcher: fc75fc972958dceedee61cb662ae1da7a83a91cf
+ path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
+ powersync-sqlite-core: 6f32860379009d2a37cadc9e9427a431bdbd83c8
+ powersync_flutter_libs: 41d8a7b193abf15e46f95f0ec1229d86b6893171
+ shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
+ sqlite3: 3c950dc86011117c307eb0b28c4a7bb449dce9f1
+ sqlite3_flutter_libs: f6acaa2172e6bb3e2e70c771661905080e8ebcf2
+ url_launcher_macos: 0fba8ddabfc33ce0a9afe7c5fef5aab3d8d2d673
+
+PODFILE CHECKSUM: 9ebaf0ce3d369aaa26a9ea0e159195ed94724cf3
+
+COCOAPODS: 1.16.2
diff --git a/demos/firebase-nodejs-todolist/macos/Runner.xcodeproj/project.pbxproj b/demos/firebase-nodejs-todolist/macos/Runner.xcodeproj/project.pbxproj
new file mode 100644
index 00000000..2ab704c4
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/macos/Runner.xcodeproj/project.pbxproj
@@ -0,0 +1,838 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 54;
+ objects = {
+
+/* Begin PBXAggregateTarget section */
+ 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = {
+ isa = PBXAggregateTarget;
+ buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */;
+ buildPhases = (
+ 33CC111E2044C6BF0003C045 /* ShellScript */,
+ );
+ dependencies = (
+ );
+ name = "Flutter Assemble";
+ productName = FLX;
+ };
+/* End PBXAggregateTarget section */
+
+/* Begin PBXBuildFile section */
+ 04EE2EEA1AF4432FCFE4D947 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 386AF35B349F70B5D676F5EC /* Pods_Runner.framework */; };
+ 2F56F886B3B1884D3E437FD0 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2FC729F34600C40853A030B /* Pods_RunnerTests.framework */; };
+ 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; };
+ 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; };
+ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; };
+ 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; };
+ 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; };
+ 8B5261612A7C463D00E9899E /* powersync_flutter_demoTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B5261602A7C463D00E9899E /* powersync_flutter_demoTests.swift */; };
+ 9DF5AEE5CF21BB7D19AEF276 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = AF177A3BDF03AB0312548FD9 /* GoogleService-Info.plist */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 33CC10E52044A3C60003C045 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 33CC111A2044C6BA0003C045;
+ remoteInfo = FLX;
+ };
+ 8B5261622A7C463D00E9899E /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 33CC10E52044A3C60003C045 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 33CC10EC2044A3C60003C045;
+ remoteInfo = Runner;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 33CC110E2044A8840003C045 /* Bundle Framework */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Bundle Framework";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 1FB90A99EA939D06EE287C09 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; };
+ 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; };
+ 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; };
+ 33CC10ED2044A3C60003C045 /* powersync_flutter_demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = powersync_flutter_demo.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
+ 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; };
+ 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; };
+ 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; };
+ 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; };
+ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; };
+ 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; };
+ 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; };
+ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; };
+ 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; };
+ 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; };
+ 386AF35B349F70B5D676F5EC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; };
+ 859D7659433CF3D1320F86CC /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; };
+ 8B52615E2A7C463D00E9899E /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ 8B5261602A7C463D00E9899E /* powersync_flutter_demoTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = powersync_flutter_demoTests.swift; sourceTree = ""; };
+ 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; };
+ 9DCB9EDE28DF57E29440CF22 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; };
+ AF177A3BDF03AB0312548FD9 /* GoogleService-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "Runner/GoogleService-Info.plist"; sourceTree = ""; };
+ AF676D80A0CF80705DF388CF /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; };
+ C1A05183B57D5869377A17B4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; };
+ C2FC729F34600C40853A030B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ D0A6A6185A7A65698B8F4B1D /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 33CC10EA2044A3C60003C045 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 04EE2EEA1AF4432FCFE4D947 /* Pods_Runner.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 8B52615B2A7C463D00E9899E /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2F56F886B3B1884D3E437FD0 /* Pods_RunnerTests.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 33BA886A226E78AF003329D5 /* Configs */ = {
+ isa = PBXGroup;
+ children = (
+ 33E5194F232828860026EE4D /* AppInfo.xcconfig */,
+ 9740EEB21CF90195004384FC /* Debug.xcconfig */,
+ 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
+ 333000ED22D3DE5D00554162 /* Warnings.xcconfig */,
+ );
+ path = Configs;
+ sourceTree = "";
+ };
+ 33CC10E42044A3C60003C045 = {
+ isa = PBXGroup;
+ children = (
+ 33FAB671232836740065AC1E /* Runner */,
+ 33CEB47122A05771004F2AC0 /* Flutter */,
+ 8B52615F2A7C463D00E9899E /* powersync_flutter_demoTests */,
+ 33CC10EE2044A3C60003C045 /* Products */,
+ D73912EC22F37F3D000D13A0 /* Frameworks */,
+ B6C445B3E9905835336FDF92 /* Pods */,
+ AF177A3BDF03AB0312548FD9 /* GoogleService-Info.plist */,
+ );
+ sourceTree = "";
+ };
+ 33CC10EE2044A3C60003C045 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 33CC10ED2044A3C60003C045 /* powersync_flutter_demo.app */,
+ 8B52615E2A7C463D00E9899E /* RunnerTests.xctest */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 33CC11242044D66E0003C045 /* Resources */ = {
+ isa = PBXGroup;
+ children = (
+ 33CC10F22044A3C60003C045 /* Assets.xcassets */,
+ 33CC10F42044A3C60003C045 /* MainMenu.xib */,
+ 33CC10F72044A3C60003C045 /* Info.plist */,
+ );
+ name = Resources;
+ path = ..;
+ sourceTree = "";
+ };
+ 33CEB47122A05771004F2AC0 /* Flutter */ = {
+ isa = PBXGroup;
+ children = (
+ 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */,
+ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */,
+ 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */,
+ 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */,
+ );
+ path = Flutter;
+ sourceTree = "";
+ };
+ 33FAB671232836740065AC1E /* Runner */ = {
+ isa = PBXGroup;
+ children = (
+ 33CC10F02044A3C60003C045 /* AppDelegate.swift */,
+ 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */,
+ 33E51913231747F40026EE4D /* DebugProfile.entitlements */,
+ 33E51914231749380026EE4D /* Release.entitlements */,
+ 33CC11242044D66E0003C045 /* Resources */,
+ 33BA886A226E78AF003329D5 /* Configs */,
+ );
+ path = Runner;
+ sourceTree = "";
+ };
+ 8B52615F2A7C463D00E9899E /* powersync_flutter_demoTests */ = {
+ isa = PBXGroup;
+ children = (
+ 8B5261602A7C463D00E9899E /* powersync_flutter_demoTests.swift */,
+ );
+ path = powersync_flutter_demoTests;
+ sourceTree = "";
+ };
+ B6C445B3E9905835336FDF92 /* Pods */ = {
+ isa = PBXGroup;
+ children = (
+ 1FB90A99EA939D06EE287C09 /* Pods-Runner.debug.xcconfig */,
+ AF676D80A0CF80705DF388CF /* Pods-Runner.release.xcconfig */,
+ C1A05183B57D5869377A17B4 /* Pods-Runner.profile.xcconfig */,
+ 9DCB9EDE28DF57E29440CF22 /* Pods-RunnerTests.debug.xcconfig */,
+ D0A6A6185A7A65698B8F4B1D /* Pods-RunnerTests.release.xcconfig */,
+ 859D7659433CF3D1320F86CC /* Pods-RunnerTests.profile.xcconfig */,
+ );
+ name = Pods;
+ path = Pods;
+ sourceTree = "";
+ };
+ D73912EC22F37F3D000D13A0 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 386AF35B349F70B5D676F5EC /* Pods_Runner.framework */,
+ C2FC729F34600C40853A030B /* Pods_RunnerTests.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 33CC10EC2044A3C60003C045 /* Runner */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */;
+ buildPhases = (
+ 9E5C59BA43BACEF39908FBDE /* [CP] Check Pods Manifest.lock */,
+ 33CC10E92044A3C60003C045 /* Sources */,
+ 33CC10EA2044A3C60003C045 /* Frameworks */,
+ 33CC10EB2044A3C60003C045 /* Resources */,
+ 33CC110E2044A8840003C045 /* Bundle Framework */,
+ 3399D490228B24CF009A79C7 /* ShellScript */,
+ 44F34942EBFBB7F6E89ED4BA /* [CP] Embed Pods Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 33CC11202044C79F0003C045 /* PBXTargetDependency */,
+ );
+ name = Runner;
+ productName = Runner;
+ productReference = 33CC10ED2044A3C60003C045 /* powersync_flutter_demo.app */;
+ productType = "com.apple.product-type.application";
+ };
+ 8B52615D2A7C463D00E9899E /* RunnerTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 8B5261672A7C463D00E9899E /* Build configuration list for PBXNativeTarget "RunnerTests" */;
+ buildPhases = (
+ 9BD4CD7B4DFE9A6CC5BE206C /* [CP] Check Pods Manifest.lock */,
+ 8B52615A2A7C463D00E9899E /* Sources */,
+ 8B52615B2A7C463D00E9899E /* Frameworks */,
+ 8B52615C2A7C463D00E9899E /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 8B5261632A7C463D00E9899E /* PBXTargetDependency */,
+ );
+ name = RunnerTests;
+ productName = powersync_flutter_demoTests;
+ productReference = 8B52615E2A7C463D00E9899E /* RunnerTests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 33CC10E52044A3C60003C045 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastSwiftUpdateCheck = 1430;
+ LastUpgradeCheck = 1430;
+ ORGANIZATIONNAME = "";
+ TargetAttributes = {
+ 33CC10EC2044A3C60003C045 = {
+ CreatedOnToolsVersion = 9.2;
+ LastSwiftMigration = 1100;
+ ProvisioningStyle = Automatic;
+ SystemCapabilities = {
+ com.apple.Sandbox = {
+ enabled = 1;
+ };
+ };
+ };
+ 33CC111A2044C6BA0003C045 = {
+ CreatedOnToolsVersion = 9.2;
+ ProvisioningStyle = Manual;
+ };
+ 8B52615D2A7C463D00E9899E = {
+ CreatedOnToolsVersion = 14.3.1;
+ TestTargetID = 33CC10EC2044A3C60003C045;
+ };
+ };
+ };
+ buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */;
+ compatibilityVersion = "Xcode 9.3";
+ developmentRegion = en;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = 33CC10E42044A3C60003C045;
+ productRefGroup = 33CC10EE2044A3C60003C045 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 33CC10EC2044A3C60003C045 /* Runner */,
+ 33CC111A2044C6BA0003C045 /* Flutter Assemble */,
+ 8B52615D2A7C463D00E9899E /* RunnerTests */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 33CC10EB2044A3C60003C045 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */,
+ 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */,
+ 9DF5AEE5CF21BB7D19AEF276 /* GoogleService-Info.plist in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 8B52615C2A7C463D00E9899E /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 3399D490228B24CF009A79C7 /* ShellScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ );
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n";
+ };
+ 33CC111E2044C6BF0003C045 /* ShellScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ Flutter/ephemeral/FlutterInputs.xcfilelist,
+ );
+ inputPaths = (
+ Flutter/ephemeral/tripwire,
+ );
+ outputFileListPaths = (
+ Flutter/ephemeral/FlutterOutputs.xcfilelist,
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire";
+ };
+ 44F34942EBFBB7F6E89ED4BA /* [CP] Embed Pods Frameworks */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Embed Pods Frameworks";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 9BD4CD7B4DFE9A6CC5BE206C /* [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-RunnerTests-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;
+ };
+ 9E5C59BA43BACEF39908FBDE /* [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-Runner-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;
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 33CC10E92044A3C60003C045 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */,
+ 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */,
+ 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 8B52615A2A7C463D00E9899E /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8B5261612A7C463D00E9899E /* powersync_flutter_demoTests.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ 33CC11202044C79F0003C045 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */;
+ targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */;
+ };
+ 8B5261632A7C463D00E9899E /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 33CC10EC2044A3C60003C045 /* Runner */;
+ targetProxy = 8B5261622A7C463D00E9899E /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin PBXVariantGroup section */
+ 33CC10F42044A3C60003C045 /* MainMenu.xib */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 33CC10F52044A3C60003C045 /* Base */,
+ );
+ name = MainMenu.xib;
+ path = Runner;
+ sourceTree = "";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 338D0CE9231458BD00FA5F75 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ 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_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ 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_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CODE_SIGN_IDENTITY = "-";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = macosx;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
+ };
+ name = Profile;
+ };
+ 338D0CEA231458BD00FA5F75 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements;
+ CODE_SIGN_STYLE = Automatic;
+ COMBINE_HIDPI_IMAGES = YES;
+ INFOPLIST_FILE = Runner/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PROVISIONING_PROFILE_SPECIFIER = "";
+ SWIFT_VERSION = 5.0;
+ };
+ name = Profile;
+ };
+ 338D0CEB231458BD00FA5F75 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_STYLE = Manual;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Profile;
+ };
+ 33CC10F92044A3C60003C045 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ 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_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ 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_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CODE_SIGN_IDENTITY = "-";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = macosx;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ };
+ name = Debug;
+ };
+ 33CC10FA2044A3C60003C045 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ 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_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ 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_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CODE_SIGN_IDENTITY = "-";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = macosx;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
+ };
+ name = Release;
+ };
+ 33CC10FC2044A3C60003C045 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements;
+ CODE_SIGN_STYLE = Automatic;
+ COMBINE_HIDPI_IMAGES = YES;
+ INFOPLIST_FILE = Runner/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PROVISIONING_PROFILE_SPECIFIER = "";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ };
+ name = Debug;
+ };
+ 33CC10FD2044A3C60003C045 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements;
+ CODE_SIGN_STYLE = Automatic;
+ COMBINE_HIDPI_IMAGES = YES;
+ INFOPLIST_FILE = Runner/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PROVISIONING_PROFILE_SPECIFIER = "";
+ SWIFT_VERSION = 5.0;
+ };
+ name = Release;
+ };
+ 33CC111C2044C6BA0003C045 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_STYLE = Manual;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Debug;
+ };
+ 33CC111D2044C6BA0003C045 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_STYLE = Automatic;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Release;
+ };
+ 8B5261642A7C463D00E9899E /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 9DCB9EDE28DF57E29440CF22 /* Pods-RunnerTests.debug.xcconfig */;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GENERATE_INFOPLIST_FILE = YES;
+ MACOSX_DEPLOYMENT_TARGET = 13.3;
+ MARKETING_VERSION = 1.0;
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+ MTL_FAST_MATH = YES;
+ PRODUCT_BUNDLE_IDENTIFIER = "co.powersync.flutter-todolist-demo.powersync-flutter-demoTests";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_EMIT_LOC_STRINGS = NO;
+ SWIFT_VERSION = 5.0;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/powersync_flutter_demo.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/powersync_flutter_demo";
+ };
+ name = Debug;
+ };
+ 8B5261652A7C463D00E9899E /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = D0A6A6185A7A65698B8F4B1D /* Pods-RunnerTests.release.xcconfig */;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GENERATE_INFOPLIST_FILE = YES;
+ MACOSX_DEPLOYMENT_TARGET = 13.3;
+ MARKETING_VERSION = 1.0;
+ MTL_FAST_MATH = YES;
+ PRODUCT_BUNDLE_IDENTIFIER = "co.powersync.flutter-todolist-demo.powersync-flutter-demoTests";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_EMIT_LOC_STRINGS = NO;
+ SWIFT_VERSION = 5.0;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/powersync_flutter_demo.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/powersync_flutter_demo";
+ };
+ name = Release;
+ };
+ 8B5261662A7C463D00E9899E /* Profile */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 859D7659433CF3D1320F86CC /* Pods-RunnerTests.profile.xcconfig */;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GENERATE_INFOPLIST_FILE = YES;
+ MACOSX_DEPLOYMENT_TARGET = 13.3;
+ MARKETING_VERSION = 1.0;
+ MTL_FAST_MATH = YES;
+ PRODUCT_BUNDLE_IDENTIFIER = "co.powersync.flutter-todolist-demo.powersync-flutter-demoTests";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_EMIT_LOC_STRINGS = NO;
+ SWIFT_VERSION = 5.0;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/powersync_flutter_demo.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/powersync_flutter_demo";
+ };
+ name = Profile;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 33CC10F92044A3C60003C045 /* Debug */,
+ 33CC10FA2044A3C60003C045 /* Release */,
+ 338D0CE9231458BD00FA5F75 /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 33CC10FC2044A3C60003C045 /* Debug */,
+ 33CC10FD2044A3C60003C045 /* Release */,
+ 338D0CEA231458BD00FA5F75 /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 33CC111C2044C6BA0003C045 /* Debug */,
+ 33CC111D2044C6BA0003C045 /* Release */,
+ 338D0CEB231458BD00FA5F75 /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 8B5261672A7C463D00E9899E /* Build configuration list for PBXNativeTarget "RunnerTests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 8B5261642A7C463D00E9899E /* Debug */,
+ 8B5261652A7C463D00E9899E /* Release */,
+ 8B5261662A7C463D00E9899E /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 33CC10E52044A3C60003C045 /* Project object */;
+}
diff --git a/demos/firebase-nodejs-todolist/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/demos/firebase-nodejs-todolist/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 00000000..18d98100
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/demos/firebase-nodejs-todolist/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/demos/firebase-nodejs-todolist/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
new file mode 100644
index 00000000..cc0e03af
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demos/firebase-nodejs-todolist/macos/Runner.xcworkspace/contents.xcworkspacedata b/demos/firebase-nodejs-todolist/macos/Runner.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 00000000..21a3cc14
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/macos/Runner.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
diff --git a/demos/firebase-nodejs-todolist/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/demos/firebase-nodejs-todolist/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 00000000..18d98100
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/demos/firebase-nodejs-todolist/macos/Runner/AppDelegate.swift b/demos/firebase-nodejs-todolist/macos/Runner/AppDelegate.swift
new file mode 100644
index 00000000..d53ef643
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/macos/Runner/AppDelegate.swift
@@ -0,0 +1,9 @@
+import Cocoa
+import FlutterMacOS
+
+@NSApplicationMain
+class AppDelegate: FlutterAppDelegate {
+ override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
+ return true
+ }
+}
diff --git a/demos/firebase-nodejs-todolist/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/demos/firebase-nodejs-todolist/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 00000000..a2ec33f1
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,68 @@
+{
+ "images" : [
+ {
+ "size" : "16x16",
+ "idiom" : "mac",
+ "filename" : "app_icon_16.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "16x16",
+ "idiom" : "mac",
+ "filename" : "app_icon_32.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "32x32",
+ "idiom" : "mac",
+ "filename" : "app_icon_32.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "32x32",
+ "idiom" : "mac",
+ "filename" : "app_icon_64.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "128x128",
+ "idiom" : "mac",
+ "filename" : "app_icon_128.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "128x128",
+ "idiom" : "mac",
+ "filename" : "app_icon_256.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "256x256",
+ "idiom" : "mac",
+ "filename" : "app_icon_256.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "256x256",
+ "idiom" : "mac",
+ "filename" : "app_icon_512.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "512x512",
+ "idiom" : "mac",
+ "filename" : "app_icon_512.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "512x512",
+ "idiom" : "mac",
+ "filename" : "app_icon_1024.png",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
diff --git a/demos/firebase-nodejs-todolist/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/demos/firebase-nodejs-todolist/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png
new file mode 100644
index 00000000..82b6f9d9
Binary files /dev/null and b/demos/firebase-nodejs-todolist/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png differ
diff --git a/demos/firebase-nodejs-todolist/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/demos/firebase-nodejs-todolist/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png
new file mode 100644
index 00000000..13b35eba
Binary files /dev/null and b/demos/firebase-nodejs-todolist/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png differ
diff --git a/demos/firebase-nodejs-todolist/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/demos/firebase-nodejs-todolist/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png
new file mode 100644
index 00000000..0a3f5fa4
Binary files /dev/null and b/demos/firebase-nodejs-todolist/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png differ
diff --git a/demos/firebase-nodejs-todolist/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/demos/firebase-nodejs-todolist/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png
new file mode 100644
index 00000000..bdb57226
Binary files /dev/null and b/demos/firebase-nodejs-todolist/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png differ
diff --git a/demos/firebase-nodejs-todolist/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/demos/firebase-nodejs-todolist/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png
new file mode 100644
index 00000000..f083318e
Binary files /dev/null and b/demos/firebase-nodejs-todolist/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png differ
diff --git a/demos/firebase-nodejs-todolist/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/demos/firebase-nodejs-todolist/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png
new file mode 100644
index 00000000..326c0e72
Binary files /dev/null and b/demos/firebase-nodejs-todolist/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png differ
diff --git a/demos/firebase-nodejs-todolist/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/demos/firebase-nodejs-todolist/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png
new file mode 100644
index 00000000..2f1632cf
Binary files /dev/null and b/demos/firebase-nodejs-todolist/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png differ
diff --git a/demos/firebase-nodejs-todolist/macos/Runner/Base.lproj/MainMenu.xib b/demos/firebase-nodejs-todolist/macos/Runner/Base.lproj/MainMenu.xib
new file mode 100644
index 00000000..80e867a4
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/macos/Runner/Base.lproj/MainMenu.xib
@@ -0,0 +1,343 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demos/firebase-nodejs-todolist/macos/Runner/Configs/AppInfo.xcconfig b/demos/firebase-nodejs-todolist/macos/Runner/Configs/AppInfo.xcconfig
new file mode 100644
index 00000000..370c9893
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/macos/Runner/Configs/AppInfo.xcconfig
@@ -0,0 +1,14 @@
+// Application-level settings for the Runner target.
+//
+// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the
+// future. If not, the values below would default to using the project name when this becomes a
+// 'flutter create' template.
+
+// The application's name. By default this is also the title of the Flutter window.
+PRODUCT_NAME = PowerSync Supabase Demo
+
+// The application's bundle identifier
+PRODUCT_BUNDLE_IDENTIFIER = co.powersync.demotodolist
+
+// The copyright displayed in application information
+PRODUCT_COPYRIGHT = Copyright © 2023 Journey Mobile, Inc. All rights reserved.
diff --git a/demos/firebase-nodejs-todolist/macos/Runner/Configs/Debug.xcconfig b/demos/firebase-nodejs-todolist/macos/Runner/Configs/Debug.xcconfig
new file mode 100644
index 00000000..36b0fd94
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/macos/Runner/Configs/Debug.xcconfig
@@ -0,0 +1,2 @@
+#include "../../Flutter/Flutter-Debug.xcconfig"
+#include "Warnings.xcconfig"
diff --git a/demos/firebase-nodejs-todolist/macos/Runner/Configs/Release.xcconfig b/demos/firebase-nodejs-todolist/macos/Runner/Configs/Release.xcconfig
new file mode 100644
index 00000000..dff4f495
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/macos/Runner/Configs/Release.xcconfig
@@ -0,0 +1,2 @@
+#include "../../Flutter/Flutter-Release.xcconfig"
+#include "Warnings.xcconfig"
diff --git a/demos/firebase-nodejs-todolist/macos/Runner/Configs/Warnings.xcconfig b/demos/firebase-nodejs-todolist/macos/Runner/Configs/Warnings.xcconfig
new file mode 100644
index 00000000..42bcbf47
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/macos/Runner/Configs/Warnings.xcconfig
@@ -0,0 +1,13 @@
+WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings
+GCC_WARN_UNDECLARED_SELECTOR = YES
+CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES
+CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE
+CLANG_WARN__DUPLICATE_METHOD_MATCH = YES
+CLANG_WARN_PRAGMA_PACK = YES
+CLANG_WARN_STRICT_PROTOTYPES = YES
+CLANG_WARN_COMMA = YES
+GCC_WARN_STRICT_SELECTOR_MATCH = YES
+CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES
+CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES
+GCC_WARN_SHADOW = YES
+CLANG_WARN_UNREACHABLE_CODE = YES
diff --git a/demos/firebase-nodejs-todolist/macos/Runner/DebugProfile.entitlements b/demos/firebase-nodejs-todolist/macos/Runner/DebugProfile.entitlements
new file mode 100644
index 00000000..08c3ab17
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/macos/Runner/DebugProfile.entitlements
@@ -0,0 +1,14 @@
+
+
+
+
+ com.apple.security.app-sandbox
+
+ com.apple.security.cs.allow-jit
+
+ com.apple.security.network.server
+
+ com.apple.security.network.client
+
+
+
diff --git a/demos/firebase-nodejs-todolist/macos/Runner/GoogleService-Info.plist b/demos/firebase-nodejs-todolist/macos/Runner/GoogleService-Info.plist
new file mode 100644
index 00000000..87461c99
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/macos/Runner/GoogleService-Info.plist
@@ -0,0 +1,30 @@
+
+
+
+
+ API_KEY
+ AIzaSyAOcRgRnbZv_aXm4jukQnLR4YR1nFNL8eQ
+ GCM_SENDER_ID
+ 1069616552579
+ PLIST_VERSION
+ 1
+ BUNDLE_ID
+ co.powersync.demotodolist
+ PROJECT_ID
+ sample-firebase-ai-app-27d98
+ STORAGE_BUCKET
+ sample-firebase-ai-app-27d98.firebasestorage.app
+ IS_ADS_ENABLED
+
+ IS_ANALYTICS_ENABLED
+
+ IS_APPINVITE_ENABLED
+
+ IS_GCM_ENABLED
+
+ IS_SIGNIN_ENABLED
+
+ GOOGLE_APP_ID
+ 1:1069616552579:ios:0d30b90e81427c07db59b6
+
+
\ No newline at end of file
diff --git a/demos/firebase-nodejs-todolist/macos/Runner/Info.plist b/demos/firebase-nodejs-todolist/macos/Runner/Info.plist
new file mode 100644
index 00000000..4789daa6
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/macos/Runner/Info.plist
@@ -0,0 +1,32 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIconFile
+
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ $(FLUTTER_BUILD_NAME)
+ CFBundleVersion
+ $(FLUTTER_BUILD_NUMBER)
+ LSMinimumSystemVersion
+ $(MACOSX_DEPLOYMENT_TARGET)
+ NSHumanReadableCopyright
+ $(PRODUCT_COPYRIGHT)
+ NSMainNibFile
+ MainMenu
+ NSPrincipalClass
+ NSApplication
+
+
diff --git a/demos/firebase-nodejs-todolist/macos/Runner/MainFlutterWindow.swift b/demos/firebase-nodejs-todolist/macos/Runner/MainFlutterWindow.swift
new file mode 100644
index 00000000..2722837e
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/macos/Runner/MainFlutterWindow.swift
@@ -0,0 +1,15 @@
+import Cocoa
+import FlutterMacOS
+
+class MainFlutterWindow: NSWindow {
+ override func awakeFromNib() {
+ let flutterViewController = FlutterViewController.init()
+ let windowFrame = self.frame
+ self.contentViewController = flutterViewController
+ self.setFrame(windowFrame, display: true)
+
+ RegisterGeneratedPlugins(registry: flutterViewController)
+
+ super.awakeFromNib()
+ }
+}
diff --git a/demos/firebase-nodejs-todolist/macos/Runner/Release.entitlements b/demos/firebase-nodejs-todolist/macos/Runner/Release.entitlements
new file mode 100644
index 00000000..ee95ab7e
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/macos/Runner/Release.entitlements
@@ -0,0 +1,10 @@
+
+
+
+
+ com.apple.security.app-sandbox
+
+ com.apple.security.network.client
+
+
+
diff --git a/demos/firebase-nodejs-todolist/macos/firebase_app_id_file.json b/demos/firebase-nodejs-todolist/macos/firebase_app_id_file.json
new file mode 100644
index 00000000..c70e242c
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/macos/firebase_app_id_file.json
@@ -0,0 +1,7 @@
+{
+ "file_generated_by": "FlutterFire CLI",
+ "purpose": "FirebaseAppID & ProjectID for this Firebase app in this directory",
+ "GOOGLE_APP_ID": "1:879921616597:ios:0d0afa4d1d1195410b745c",
+ "FIREBASE_PROJECT_ID": "kobie-powersync-testing",
+ "GCM_SENDER_ID": "879921616597"
+}
\ No newline at end of file
diff --git a/demos/firebase-nodejs-todolist/pubspec.lock b/demos/firebase-nodejs-todolist/pubspec.lock
new file mode 100644
index 00000000..5eead021
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/pubspec.lock
@@ -0,0 +1,815 @@
+# Generated by pub
+# See https://dart.dev/tools/pub/glossary#lockfile
+packages:
+ _flutterfire_internals:
+ dependency: transitive
+ description:
+ name: _flutterfire_internals
+ sha256: de9ecbb3ddafd446095f7e833c853aff2fa1682b017921fe63a833f9d6f0e422
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.54"
+ app_links:
+ dependency: transitive
+ description:
+ name: app_links
+ sha256: "85ed8fc1d25a76475914fff28cc994653bd900bc2c26e4b57a49e097febb54ba"
+ url: "https://pub.dev"
+ source: hosted
+ version: "6.4.0"
+ app_links_linux:
+ dependency: transitive
+ description:
+ name: app_links_linux
+ sha256: f5f7173a78609f3dfd4c2ff2c95bd559ab43c80a87dc6a095921d96c05688c81
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.3"
+ app_links_platform_interface:
+ dependency: transitive
+ description:
+ name: app_links_platform_interface
+ sha256: "05f5379577c513b534a29ddea68176a4d4802c46180ee8e2e966257158772a3f"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.2"
+ app_links_web:
+ dependency: transitive
+ description:
+ name: app_links_web
+ sha256: af060ed76183f9e2b87510a9480e56a5352b6c249778d07bd2c95fc35632a555
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.4"
+ args:
+ dependency: transitive
+ description:
+ name: args
+ sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.7.0"
+ async:
+ dependency: transitive
+ description:
+ name: async
+ sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.13.0"
+ boolean_selector:
+ dependency: transitive
+ description:
+ name: boolean_selector
+ sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.2"
+ characters:
+ dependency: transitive
+ description:
+ name: characters
+ sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.0"
+ checked_yaml:
+ dependency: transitive
+ description:
+ name: checked_yaml
+ sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.3"
+ clock:
+ dependency: transitive
+ description:
+ name: clock
+ sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.2"
+ collection:
+ dependency: transitive
+ description:
+ name: collection
+ sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.19.1"
+ crypto:
+ dependency: transitive
+ description:
+ name: crypto
+ sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.6"
+ fake_async:
+ dependency: transitive
+ description:
+ name: fake_async
+ sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.3"
+ ffi:
+ dependency: transitive
+ description:
+ name: ffi
+ sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.4"
+ file:
+ dependency: transitive
+ description:
+ name: file
+ sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4
+ url: "https://pub.dev"
+ source: hosted
+ version: "7.0.1"
+ firebase_auth:
+ dependency: "direct main"
+ description:
+ name: firebase_auth
+ sha256: "06787c45d773af3db3ae693ff648ef488e6048a00b654620b3b8849988f63793"
+ url: "https://pub.dev"
+ source: hosted
+ version: "5.5.3"
+ firebase_auth_platform_interface:
+ dependency: transitive
+ description:
+ name: firebase_auth_platform_interface
+ sha256: "5402d13f4bb7f29f2fb819f3b6b5a5a56c9f714aef2276546d397e25ac1b6b8e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "7.6.2"
+ firebase_auth_web:
+ dependency: transitive
+ description:
+ name: firebase_auth_web
+ sha256: "2be496911f0807895d5fe8067b70b7d758142dd7fb26485cbe23e525e2547764"
+ url: "https://pub.dev"
+ source: hosted
+ version: "5.14.2"
+ firebase_core:
+ dependency: "direct main"
+ description:
+ name: firebase_core
+ sha256: "017d17d9915670e6117497e640b2859e0b868026ea36bf3a57feb28c3b97debe"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.13.0"
+ firebase_core_platform_interface:
+ dependency: transitive
+ description:
+ name: firebase_core_platform_interface
+ sha256: d7253d255ff10f85cfd2adaba9ac17bae878fa3ba577462451163bd9f1d1f0bf
+ url: "https://pub.dev"
+ source: hosted
+ version: "5.4.0"
+ firebase_core_web:
+ dependency: transitive
+ description:
+ name: firebase_core_web
+ sha256: "129a34d1e0fb62e2b488d988a1fc26cc15636357e50944ffee2862efe8929b23"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.22.0"
+ fixnum:
+ dependency: transitive
+ description:
+ name: fixnum
+ sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.1"
+ flutter:
+ dependency: "direct main"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ flutter_lints:
+ dependency: "direct dev"
+ description:
+ name: flutter_lints
+ sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.2"
+ flutter_test:
+ dependency: "direct dev"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ flutter_web_plugins:
+ dependency: transitive
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ functions_client:
+ dependency: transitive
+ description:
+ name: functions_client
+ sha256: b410e4d609522357396cd84bb9a8f6e3a4561b5f7d3ce82267f6f1c2af42f16b
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.4.2"
+ gotrue:
+ dependency: transitive
+ description:
+ name: gotrue
+ sha256: "04a6efacffd42773ed96dc752f19bb20a1fbc383e81ba82659072b775cf62912"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.12.0"
+ gtk:
+ dependency: transitive
+ description:
+ name: gtk
+ sha256: e8ce9ca4b1df106e4d72dad201d345ea1a036cc12c360f1a7d5a758f78ffa42c
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.0"
+ http:
+ dependency: "direct main"
+ description:
+ name: http
+ sha256: "2c11f3f94c687ee9bad77c171151672986360b2b001d109814ee7140b2cf261b"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.0"
+ http_parser:
+ dependency: transitive
+ description:
+ name: http_parser
+ sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.1.2"
+ json_annotation:
+ dependency: transitive
+ description:
+ name: json_annotation
+ sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.9.0"
+ jwt_decode:
+ dependency: transitive
+ description:
+ name: jwt_decode
+ sha256: d2e9f68c052b2225130977429d30f187aa1981d789c76ad104a32243cfdebfbb
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.3.1"
+ leak_tracker:
+ dependency: transitive
+ description:
+ name: leak_tracker
+ sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0"
+ url: "https://pub.dev"
+ source: hosted
+ version: "10.0.9"
+ leak_tracker_flutter_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_flutter_testing
+ sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.9"
+ leak_tracker_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_testing
+ sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.1"
+ lints:
+ dependency: transitive
+ description:
+ name: lints
+ sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.0"
+ logging:
+ dependency: "direct main"
+ description:
+ name: logging
+ sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.0"
+ matcher:
+ dependency: transitive
+ description:
+ name: matcher
+ sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.12.17"
+ material_color_utilities:
+ dependency: transitive
+ description:
+ name: material_color_utilities
+ sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.11.1"
+ meta:
+ dependency: transitive
+ description:
+ name: meta
+ sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.16.0"
+ mime:
+ dependency: transitive
+ description:
+ name: mime
+ sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.0"
+ mutex:
+ dependency: transitive
+ description:
+ name: mutex
+ sha256: "8827da25de792088eb33e572115a5eb0d61d61a3c01acbc8bcbe76ed78f1a1f2"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.1.0"
+ path:
+ dependency: "direct main"
+ description:
+ name: path
+ sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.9.1"
+ path_provider:
+ dependency: "direct main"
+ description:
+ name: path_provider
+ sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.5"
+ path_provider_android:
+ dependency: transitive
+ description:
+ name: path_provider_android
+ sha256: d0d310befe2c8ab9e7f393288ccbb11b60c019c6b5afc21973eeee4dda2b35e9
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.17"
+ path_provider_foundation:
+ dependency: transitive
+ description:
+ name: path_provider_foundation
+ sha256: "4843174df4d288f5e29185bd6e72a6fbdf5a4a4602717eed565497429f179942"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.4.1"
+ path_provider_linux:
+ dependency: transitive
+ description:
+ name: path_provider_linux
+ sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.1"
+ path_provider_platform_interface:
+ dependency: transitive
+ description:
+ name: path_provider_platform_interface
+ sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.2"
+ path_provider_windows:
+ dependency: transitive
+ description:
+ name: path_provider_windows
+ sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.3.0"
+ platform:
+ dependency: transitive
+ description:
+ name: platform
+ sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.1.6"
+ plugin_platform_interface:
+ dependency: transitive
+ description:
+ name: plugin_platform_interface
+ sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.8"
+ postgrest:
+ dependency: transitive
+ description:
+ name: postgrest
+ sha256: "10b81a23b1c829ccadf68c626b4d66666453a1474d24c563f313f5ca7851d575"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.4.2"
+ powersync:
+ dependency: "direct main"
+ description:
+ path: "../../packages/powersync"
+ relative: true
+ source: path
+ version: "1.15.0"
+ powersync_core:
+ dependency: "direct overridden"
+ description:
+ path: "../../packages/powersync_core"
+ relative: true
+ source: path
+ version: "1.5.0"
+ powersync_flutter_libs:
+ dependency: "direct overridden"
+ description:
+ path: "../../packages/powersync_flutter_libs"
+ relative: true
+ source: path
+ version: "0.4.10"
+ pub_semver:
+ dependency: transitive
+ description:
+ name: pub_semver
+ sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.0"
+ pubspec_parse:
+ dependency: transitive
+ description:
+ name: pubspec_parse
+ sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.5.0"
+ realtime_client:
+ dependency: transitive
+ description:
+ name: realtime_client
+ sha256: "3a0a99b5bd0fc3b35e8ee846d9a22fa2c2117f7ef1cb73d1e5f08f6c3d09c4e9"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.5.0"
+ retry:
+ dependency: transitive
+ description:
+ name: retry
+ sha256: "822e118d5b3aafed083109c72d5f484c6dc66707885e07c0fbcb8b986bba7efc"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.1.2"
+ rxdart:
+ dependency: transitive
+ description:
+ name: rxdart
+ sha256: "5c3004a4a8dbb94bd4bf5412a4def4acdaa12e12f269737a5751369e12d1a962"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.28.0"
+ shared_preferences:
+ dependency: transitive
+ description:
+ name: shared_preferences
+ sha256: "6e8bf70b7fef813df4e9a36f658ac46d107db4b4cfe1048b477d4e453a8159f5"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.5.3"
+ shared_preferences_android:
+ dependency: transitive
+ description:
+ name: shared_preferences_android
+ sha256: "20cbd561f743a342c76c151d6ddb93a9ce6005751e7aa458baad3858bfbfb6ac"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.4.10"
+ shared_preferences_foundation:
+ dependency: transitive
+ description:
+ name: shared_preferences_foundation
+ sha256: "6a52cfcdaeac77cad8c97b539ff688ccfc458c007b4db12be584fbe5c0e49e03"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.5.4"
+ shared_preferences_linux:
+ dependency: transitive
+ description:
+ name: shared_preferences_linux
+ sha256: "580abfd40f415611503cae30adf626e6656dfb2f0cee8f465ece7b6defb40f2f"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.4.1"
+ shared_preferences_platform_interface:
+ dependency: transitive
+ description:
+ name: shared_preferences_platform_interface
+ sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.4.1"
+ shared_preferences_web:
+ dependency: transitive
+ description:
+ name: shared_preferences_web
+ sha256: c49bd060261c9a3f0ff445892695d6212ff603ef3115edbb448509d407600019
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.4.3"
+ shared_preferences_windows:
+ dependency: transitive
+ description:
+ name: shared_preferences_windows
+ sha256: "94ef0f72b2d71bc3e700e025db3710911bd51a71cefb65cc609dd0d9a982e3c1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.4.1"
+ sky_engine:
+ dependency: transitive
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ source_span:
+ dependency: transitive
+ description:
+ name: source_span
+ sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.10.1"
+ sprintf:
+ dependency: transitive
+ description:
+ name: sprintf
+ sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23"
+ url: "https://pub.dev"
+ source: hosted
+ version: "7.0.0"
+ sqlite3:
+ dependency: transitive
+ description:
+ name: sqlite3
+ sha256: "310af39c40dd0bb2058538333c9d9840a2725ae0b9f77e4fd09ad6696aa8f66e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.7.5"
+ sqlite3_flutter_libs:
+ dependency: transitive
+ description:
+ name: sqlite3_flutter_libs
+ sha256: "1a96b59227828d9eb1463191d684b37a27d66ee5ed7597fcf42eee6452c88a14"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.5.32"
+ sqlite3_web:
+ dependency: transitive
+ description:
+ name: sqlite3_web
+ sha256: "967e076442f7e1233bd7241ca61f3efe4c7fc168dac0f38411bdb3bdf471eb3c"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.3.1"
+ sqlite_async:
+ dependency: transitive
+ description:
+ name: sqlite_async
+ sha256: a60e8d5c8df8e694933bd5a312c38393e79ad77d784bb91c6f38ba627bfb7aec
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.11.4"
+ stack_trace:
+ dependency: transitive
+ description:
+ name: stack_trace
+ sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.12.1"
+ storage_client:
+ dependency: transitive
+ description:
+ name: storage_client
+ sha256: "09bac4d75eea58e8113ca928e6655a09cc8059e6d1b472ee801f01fde815bcfc"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.4.0"
+ stream_channel:
+ dependency: transitive
+ description:
+ name: stream_channel
+ sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.4"
+ string_scanner:
+ dependency: transitive
+ description:
+ name: string_scanner
+ sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.1"
+ supabase:
+ dependency: transitive
+ description:
+ name: supabase
+ sha256: f00172f5f0b2148ea1c573f52862d50cacb6f353f579f741fa35e51704845958
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.7.0"
+ supabase_flutter:
+ dependency: "direct main"
+ description:
+ name: supabase_flutter
+ sha256: d88eccf9e46e57129725a08e72a3109b6f780921fdc27fe3d7669a11ae80906b
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.9.0"
+ term_glyph:
+ dependency: transitive
+ description:
+ name: term_glyph
+ sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.2.2"
+ test_api:
+ dependency: transitive
+ description:
+ name: test_api
+ sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.7.4"
+ typed_data:
+ dependency: transitive
+ description:
+ name: typed_data
+ sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.0"
+ universal_io:
+ dependency: transitive
+ description:
+ name: universal_io
+ sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.2"
+ url_launcher:
+ dependency: transitive
+ description:
+ name: url_launcher
+ sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603"
+ url: "https://pub.dev"
+ source: hosted
+ version: "6.3.1"
+ url_launcher_android:
+ dependency: transitive
+ description:
+ name: url_launcher_android
+ sha256: "8582d7f6fe14d2652b4c45c9b6c14c0b678c2af2d083a11b604caeba51930d79"
+ url: "https://pub.dev"
+ source: hosted
+ version: "6.3.16"
+ url_launcher_ios:
+ dependency: transitive
+ description:
+ name: url_launcher_ios
+ sha256: "7f2022359d4c099eea7df3fdf739f7d3d3b9faf3166fb1dd390775176e0b76cb"
+ url: "https://pub.dev"
+ source: hosted
+ version: "6.3.3"
+ url_launcher_linux:
+ dependency: transitive
+ description:
+ name: url_launcher_linux
+ sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.2.1"
+ url_launcher_macos:
+ dependency: transitive
+ description:
+ name: url_launcher_macos
+ sha256: "17ba2000b847f334f16626a574c702b196723af2a289e7a93ffcb79acff855c2"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.2.2"
+ url_launcher_platform_interface:
+ dependency: transitive
+ description:
+ name: url_launcher_platform_interface
+ sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.3.2"
+ url_launcher_web:
+ dependency: transitive
+ description:
+ name: url_launcher_web
+ sha256: "4bd2b7b4dc4d4d0b94e5babfffbca8eac1a126c7f3d6ecbc1a11013faa3abba2"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.4.1"
+ url_launcher_windows:
+ dependency: transitive
+ description:
+ name: url_launcher_windows
+ sha256: "3284b6d2ac454cf34f114e1d3319866fdd1e19cdc329999057e44ffe936cfa77"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.1.4"
+ uuid:
+ dependency: transitive
+ description:
+ name: uuid
+ sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.5.1"
+ vector_math:
+ dependency: transitive
+ description:
+ name: vector_math
+ sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.4"
+ vm_service:
+ dependency: transitive
+ description:
+ name: vm_service
+ sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02
+ url: "https://pub.dev"
+ source: hosted
+ version: "15.0.0"
+ web:
+ dependency: transitive
+ description:
+ name: web
+ sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.1"
+ web_socket:
+ dependency: transitive
+ description:
+ name: web_socket
+ sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.1"
+ web_socket_channel:
+ dependency: transitive
+ description:
+ name: web_socket_channel
+ sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.3"
+ xdg_directories:
+ dependency: transitive
+ description:
+ name: xdg_directories
+ sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.0"
+ yaml:
+ dependency: transitive
+ description:
+ name: yaml
+ sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.1.3"
+ yet_another_json_isolate:
+ dependency: transitive
+ description:
+ name: yet_another_json_isolate
+ sha256: fe45897501fa156ccefbfb9359c9462ce5dec092f05e8a56109db30be864f01e
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.0"
+sdks:
+ dart: ">=3.7.0 <4.0.0"
+ flutter: ">=3.27.0"
diff --git a/demos/firebase-nodejs-todolist/pubspec.yaml b/demos/firebase-nodejs-todolist/pubspec.yaml
new file mode 100644
index 00000000..de6ea1fe
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/pubspec.yaml
@@ -0,0 +1,30 @@
+name: firebase_nodejs_todolist
+description: Firebase NodeJS Todo List Demo
+publish_to: "none"
+
+version: 1.0.0+1
+
+environment:
+ sdk: ">=3.0.0"
+
+dependencies:
+ flutter:
+ sdk: flutter
+
+ powersync: ^1.16.1
+ path_provider: ^2.1.1
+ supabase_flutter: ^2.0.1
+ path: ^1.8.3
+ logging: ^1.1.1
+ firebase_core: ^3.8.0
+ firebase_auth: ^5.3.3
+ http: ^1.2.2
+
+dev_dependencies:
+ flutter_test:
+ sdk: flutter
+
+ flutter_lints: ^3.0.1
+
+flutter:
+ uses-material-design: true
diff --git a/demos/firebase-nodejs-todolist/windows/.gitignore b/demos/firebase-nodejs-todolist/windows/.gitignore
new file mode 100644
index 00000000..d492d0d9
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/windows/.gitignore
@@ -0,0 +1,17 @@
+flutter/ephemeral/
+
+# Visual Studio user-specific files.
+*.suo
+*.user
+*.userosscache
+*.sln.docstates
+
+# Visual Studio build-related files.
+x64/
+x86/
+
+# Visual Studio cache files
+# files ending in .cache can be ignored
+*.[Cc]ache
+# but keep track of directories ending in .cache
+!*.[Cc]ache/
diff --git a/demos/firebase-nodejs-todolist/windows/CMakeLists.txt b/demos/firebase-nodejs-todolist/windows/CMakeLists.txt
new file mode 100644
index 00000000..ccfc4498
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/windows/CMakeLists.txt
@@ -0,0 +1,101 @@
+# Project-level configuration.
+cmake_minimum_required(VERSION 3.14)
+project(powersync_flutter_demo LANGUAGES CXX)
+
+# The name of the executable created for the application. Change this to change
+# the on-disk name of your application.
+set(BINARY_NAME "powersync_flutter_demo")
+
+# Explicitly opt in to modern CMake behaviors to avoid warnings with recent
+# versions of CMake.
+cmake_policy(SET CMP0063 NEW)
+
+# Define build configuration option.
+get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
+if(IS_MULTICONFIG)
+ set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release"
+ CACHE STRING "" FORCE)
+else()
+ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
+ set(CMAKE_BUILD_TYPE "Debug" CACHE
+ STRING "Flutter build mode" FORCE)
+ set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
+ "Debug" "Profile" "Release")
+ endif()
+endif()
+# Define settings for the Profile build mode.
+set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}")
+set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}")
+set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}")
+set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}")
+
+# Use Unicode for all projects.
+add_definitions(-DUNICODE -D_UNICODE)
+
+# Compilation settings that should be applied to most targets.
+#
+# Be cautious about adding new options here, as plugins use this function by
+# default. In most cases, you should add new options to specific targets instead
+# of modifying this function.
+function(APPLY_STANDARD_SETTINGS TARGET)
+ target_compile_features(${TARGET} PUBLIC cxx_std_17)
+ target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100")
+ target_compile_options(${TARGET} PRIVATE /EHsc)
+ target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0")
+ target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>")
+endfunction()
+
+# Flutter library and tool build rules.
+set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter")
+add_subdirectory(${FLUTTER_MANAGED_DIR})
+
+# Application build; see runner/CMakeLists.txt.
+add_subdirectory("runner")
+
+# Generated plugin build rules, which manage building the plugins and adding
+# them to the application.
+include(flutter/generated_plugins.cmake)
+
+
+# === Installation ===
+# Support files are copied into place next to the executable, so that it can
+# run in place. This is done instead of making a separate bundle (as on Linux)
+# so that building and running from within Visual Studio will work.
+set(BUILD_BUNDLE_DIR "$")
+# Make the "install" step default, as it's required to run.
+set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1)
+if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
+ set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE)
+endif()
+
+set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data")
+set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}")
+
+install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}"
+ COMPONENT Runtime)
+
+install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}"
+ COMPONENT Runtime)
+
+install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
+ COMPONENT Runtime)
+
+if(PLUGIN_BUNDLED_LIBRARIES)
+ install(FILES "${PLUGIN_BUNDLED_LIBRARIES}"
+ DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
+ COMPONENT Runtime)
+endif()
+
+# Fully re-copy the assets directory on each build to avoid having stale files
+# from a previous install.
+set(FLUTTER_ASSET_DIR_NAME "flutter_assets")
+install(CODE "
+ file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\")
+ " COMPONENT Runtime)
+install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}"
+ DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime)
+
+# Install the AOT library on non-Debug builds only.
+install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}"
+ CONFIGURATIONS Profile;Release
+ COMPONENT Runtime)
diff --git a/demos/firebase-nodejs-todolist/windows/flutter/CMakeLists.txt b/demos/firebase-nodejs-todolist/windows/flutter/CMakeLists.txt
new file mode 100644
index 00000000..930d2071
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/windows/flutter/CMakeLists.txt
@@ -0,0 +1,104 @@
+# This file controls Flutter-level build steps. It should not be edited.
+cmake_minimum_required(VERSION 3.14)
+
+set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral")
+
+# Configuration provided via flutter tool.
+include(${EPHEMERAL_DIR}/generated_config.cmake)
+
+# TODO: Move the rest of this into files in ephemeral. See
+# https://github.com/flutter/flutter/issues/57146.
+set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper")
+
+# === Flutter Library ===
+set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll")
+
+# Published to parent scope for install step.
+set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE)
+set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE)
+set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE)
+set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE)
+
+list(APPEND FLUTTER_LIBRARY_HEADERS
+ "flutter_export.h"
+ "flutter_windows.h"
+ "flutter_messenger.h"
+ "flutter_plugin_registrar.h"
+ "flutter_texture_registrar.h"
+)
+list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/")
+add_library(flutter INTERFACE)
+target_include_directories(flutter INTERFACE
+ "${EPHEMERAL_DIR}"
+)
+target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib")
+add_dependencies(flutter flutter_assemble)
+
+# === Wrapper ===
+list(APPEND CPP_WRAPPER_SOURCES_CORE
+ "core_implementations.cc"
+ "standard_codec.cc"
+)
+list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/")
+list(APPEND CPP_WRAPPER_SOURCES_PLUGIN
+ "plugin_registrar.cc"
+)
+list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/")
+list(APPEND CPP_WRAPPER_SOURCES_APP
+ "flutter_engine.cc"
+ "flutter_view_controller.cc"
+)
+list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/")
+
+# Wrapper sources needed for a plugin.
+add_library(flutter_wrapper_plugin STATIC
+ ${CPP_WRAPPER_SOURCES_CORE}
+ ${CPP_WRAPPER_SOURCES_PLUGIN}
+)
+apply_standard_settings(flutter_wrapper_plugin)
+set_target_properties(flutter_wrapper_plugin PROPERTIES
+ POSITION_INDEPENDENT_CODE ON)
+set_target_properties(flutter_wrapper_plugin PROPERTIES
+ CXX_VISIBILITY_PRESET hidden)
+target_link_libraries(flutter_wrapper_plugin PUBLIC flutter)
+target_include_directories(flutter_wrapper_plugin PUBLIC
+ "${WRAPPER_ROOT}/include"
+)
+add_dependencies(flutter_wrapper_plugin flutter_assemble)
+
+# Wrapper sources needed for the runner.
+add_library(flutter_wrapper_app STATIC
+ ${CPP_WRAPPER_SOURCES_CORE}
+ ${CPP_WRAPPER_SOURCES_APP}
+)
+apply_standard_settings(flutter_wrapper_app)
+target_link_libraries(flutter_wrapper_app PUBLIC flutter)
+target_include_directories(flutter_wrapper_app PUBLIC
+ "${WRAPPER_ROOT}/include"
+)
+add_dependencies(flutter_wrapper_app flutter_assemble)
+
+# === Flutter tool backend ===
+# _phony_ is a non-existent file to force this command to run every time,
+# since currently there's no way to get a full input/output list from the
+# flutter tool.
+set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_")
+set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE)
+add_custom_command(
+ OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS}
+ ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN}
+ ${CPP_WRAPPER_SOURCES_APP}
+ ${PHONY_OUTPUT}
+ COMMAND ${CMAKE_COMMAND} -E env
+ ${FLUTTER_TOOL_ENVIRONMENT}
+ "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat"
+ windows-x64 $
+ VERBATIM
+)
+add_custom_target(flutter_assemble DEPENDS
+ "${FLUTTER_LIBRARY}"
+ ${FLUTTER_LIBRARY_HEADERS}
+ ${CPP_WRAPPER_SOURCES_CORE}
+ ${CPP_WRAPPER_SOURCES_PLUGIN}
+ ${CPP_WRAPPER_SOURCES_APP}
+)
diff --git a/demos/firebase-nodejs-todolist/windows/flutter/generated_plugin_registrant.cc b/demos/firebase-nodejs-todolist/windows/flutter/generated_plugin_registrant.cc
new file mode 100644
index 00000000..ecfe9c8a
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/windows/flutter/generated_plugin_registrant.cc
@@ -0,0 +1,29 @@
+//
+// Generated file. Do not edit.
+//
+
+// clang-format off
+
+#include "generated_plugin_registrant.h"
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+void RegisterPlugins(flutter::PluginRegistry* registry) {
+ AppLinksPluginCApiRegisterWithRegistrar(
+ registry->GetRegistrarForPlugin("AppLinksPluginCApi"));
+ FirebaseAuthPluginCApiRegisterWithRegistrar(
+ registry->GetRegistrarForPlugin("FirebaseAuthPluginCApi"));
+ FirebaseCorePluginCApiRegisterWithRegistrar(
+ registry->GetRegistrarForPlugin("FirebaseCorePluginCApi"));
+ PowersyncFlutterLibsPluginRegisterWithRegistrar(
+ registry->GetRegistrarForPlugin("PowersyncFlutterLibsPlugin"));
+ Sqlite3FlutterLibsPluginRegisterWithRegistrar(
+ registry->GetRegistrarForPlugin("Sqlite3FlutterLibsPlugin"));
+ UrlLauncherWindowsRegisterWithRegistrar(
+ registry->GetRegistrarForPlugin("UrlLauncherWindows"));
+}
diff --git a/demos/firebase-nodejs-todolist/windows/flutter/generated_plugin_registrant.h b/demos/firebase-nodejs-todolist/windows/flutter/generated_plugin_registrant.h
new file mode 100644
index 00000000..dc139d85
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/windows/flutter/generated_plugin_registrant.h
@@ -0,0 +1,15 @@
+//
+// Generated file. Do not edit.
+//
+
+// clang-format off
+
+#ifndef GENERATED_PLUGIN_REGISTRANT_
+#define GENERATED_PLUGIN_REGISTRANT_
+
+#include
+
+// Registers Flutter plugins.
+void RegisterPlugins(flutter::PluginRegistry* registry);
+
+#endif // GENERATED_PLUGIN_REGISTRANT_
diff --git a/demos/firebase-nodejs-todolist/windows/flutter/generated_plugins.cmake b/demos/firebase-nodejs-todolist/windows/flutter/generated_plugins.cmake
new file mode 100644
index 00000000..4957d4ca
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/windows/flutter/generated_plugins.cmake
@@ -0,0 +1,29 @@
+#
+# Generated file, do not edit.
+#
+
+list(APPEND FLUTTER_PLUGIN_LIST
+ app_links
+ firebase_auth
+ firebase_core
+ powersync_flutter_libs
+ sqlite3_flutter_libs
+ url_launcher_windows
+)
+
+list(APPEND FLUTTER_FFI_PLUGIN_LIST
+)
+
+set(PLUGIN_BUNDLED_LIBRARIES)
+
+foreach(plugin ${FLUTTER_PLUGIN_LIST})
+ add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin})
+ target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin)
+ list(APPEND PLUGIN_BUNDLED_LIBRARIES $)
+ list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries})
+endforeach(plugin)
+
+foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST})
+ add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin})
+ list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries})
+endforeach(ffi_plugin)
diff --git a/demos/firebase-nodejs-todolist/windows/runner/CMakeLists.txt b/demos/firebase-nodejs-todolist/windows/runner/CMakeLists.txt
new file mode 100644
index 00000000..394917c0
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/windows/runner/CMakeLists.txt
@@ -0,0 +1,40 @@
+cmake_minimum_required(VERSION 3.14)
+project(runner LANGUAGES CXX)
+
+# Define the application target. To change its name, change BINARY_NAME in the
+# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer
+# work.
+#
+# Any new source files that you add to the application should be added here.
+add_executable(${BINARY_NAME} WIN32
+ "flutter_window.cpp"
+ "main.cpp"
+ "utils.cpp"
+ "win32_window.cpp"
+ "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc"
+ "Runner.rc"
+ "runner.exe.manifest"
+)
+
+# Apply the standard set of build settings. This can be removed for applications
+# that need different build settings.
+apply_standard_settings(${BINARY_NAME})
+
+# Add preprocessor definitions for the build version.
+target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"")
+target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}")
+target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}")
+target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}")
+target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}")
+
+# Disable Windows macros that collide with C++ standard library functions.
+target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX")
+
+# Add dependency libraries and include directories. Add any application-specific
+# dependencies here.
+target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app)
+target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib")
+target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}")
+
+# Run the Flutter tool portions of the build. This must not be removed.
+add_dependencies(${BINARY_NAME} flutter_assemble)
diff --git a/demos/firebase-nodejs-todolist/windows/runner/Runner.rc b/demos/firebase-nodejs-todolist/windows/runner/Runner.rc
new file mode 100644
index 00000000..75674c07
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/windows/runner/Runner.rc
@@ -0,0 +1,121 @@
+// Microsoft Visual C++ generated resource script.
+//
+#pragma code_page(65001)
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "winres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (United States) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+ "#include ""winres.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDI_APP_ICON ICON "resources\\app_icon.ico"
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD)
+#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD
+#else
+#define VERSION_AS_NUMBER 1,0,0,0
+#endif
+
+#if defined(FLUTTER_VERSION)
+#define VERSION_AS_STRING FLUTTER_VERSION
+#else
+#define VERSION_AS_STRING "1.0.0"
+#endif
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION VERSION_AS_NUMBER
+ PRODUCTVERSION VERSION_AS_NUMBER
+ FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
+#ifdef _DEBUG
+ FILEFLAGS VS_FF_DEBUG
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS VOS__WINDOWS32
+ FILETYPE VFT_APP
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904e4"
+ BEGIN
+ VALUE "CompanyName", "Journey Mobile Inc" "\0"
+ VALUE "FileDescription", "powersync_todolist_demo" "\0"
+ VALUE "FileVersion", VERSION_AS_STRING "\0"
+ VALUE "InternalName", "powersync_flutter_demo" "\0"
+ VALUE "LegalCopyright", "Copyright (C) 2023 Journey Mobile, Inc. All rights reserved." "\0"
+ VALUE "OriginalFilename", "powersync_todolist_demo.exe" "\0"
+ VALUE "ProductName", "powersync_todolist_demo" "\0"
+ VALUE "ProductVersion", VERSION_AS_STRING "\0"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 1252
+ END
+END
+
+#endif // English (United States) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
diff --git a/demos/firebase-nodejs-todolist/windows/runner/flutter_window.cpp b/demos/firebase-nodejs-todolist/windows/runner/flutter_window.cpp
new file mode 100644
index 00000000..b25e363e
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/windows/runner/flutter_window.cpp
@@ -0,0 +1,66 @@
+#include "flutter_window.h"
+
+#include
+
+#include "flutter/generated_plugin_registrant.h"
+
+FlutterWindow::FlutterWindow(const flutter::DartProject& project)
+ : project_(project) {}
+
+FlutterWindow::~FlutterWindow() {}
+
+bool FlutterWindow::OnCreate() {
+ if (!Win32Window::OnCreate()) {
+ return false;
+ }
+
+ RECT frame = GetClientArea();
+
+ // The size here must match the window dimensions to avoid unnecessary surface
+ // creation / destruction in the startup path.
+ flutter_controller_ = std::make_unique(
+ frame.right - frame.left, frame.bottom - frame.top, project_);
+ // Ensure that basic setup of the controller was successful.
+ if (!flutter_controller_->engine() || !flutter_controller_->view()) {
+ return false;
+ }
+ RegisterPlugins(flutter_controller_->engine());
+ SetChildContent(flutter_controller_->view()->GetNativeWindow());
+
+ flutter_controller_->engine()->SetNextFrameCallback([&]() {
+ this->Show();
+ });
+
+ return true;
+}
+
+void FlutterWindow::OnDestroy() {
+ if (flutter_controller_) {
+ flutter_controller_ = nullptr;
+ }
+
+ Win32Window::OnDestroy();
+}
+
+LRESULT
+FlutterWindow::MessageHandler(HWND hwnd, UINT const message,
+ WPARAM const wparam,
+ LPARAM const lparam) noexcept {
+ // Give Flutter, including plugins, an opportunity to handle window messages.
+ if (flutter_controller_) {
+ std::optional result =
+ flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam,
+ lparam);
+ if (result) {
+ return *result;
+ }
+ }
+
+ switch (message) {
+ case WM_FONTCHANGE:
+ flutter_controller_->engine()->ReloadSystemFonts();
+ break;
+ }
+
+ return Win32Window::MessageHandler(hwnd, message, wparam, lparam);
+}
diff --git a/demos/firebase-nodejs-todolist/windows/runner/flutter_window.h b/demos/firebase-nodejs-todolist/windows/runner/flutter_window.h
new file mode 100644
index 00000000..6da0652f
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/windows/runner/flutter_window.h
@@ -0,0 +1,33 @@
+#ifndef RUNNER_FLUTTER_WINDOW_H_
+#define RUNNER_FLUTTER_WINDOW_H_
+
+#include
+#include
+
+#include
+
+#include "win32_window.h"
+
+// A window that does nothing but host a Flutter view.
+class FlutterWindow : public Win32Window {
+ public:
+ // Creates a new FlutterWindow hosting a Flutter view running |project|.
+ explicit FlutterWindow(const flutter::DartProject& project);
+ virtual ~FlutterWindow();
+
+ protected:
+ // Win32Window:
+ bool OnCreate() override;
+ void OnDestroy() override;
+ LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam,
+ LPARAM const lparam) noexcept override;
+
+ private:
+ // The project to run.
+ flutter::DartProject project_;
+
+ // The Flutter instance hosted by this window.
+ std::unique_ptr flutter_controller_;
+};
+
+#endif // RUNNER_FLUTTER_WINDOW_H_
diff --git a/demos/firebase-nodejs-todolist/windows/runner/main.cpp b/demos/firebase-nodejs-todolist/windows/runner/main.cpp
new file mode 100644
index 00000000..3eee96b7
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/windows/runner/main.cpp
@@ -0,0 +1,43 @@
+#include
+#include
+#include
+
+#include "flutter_window.h"
+#include "utils.h"
+
+int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
+ _In_ wchar_t *command_line, _In_ int show_command) {
+ // Attach to console when present (e.g., 'flutter run') or create a
+ // new console when running with a debugger.
+ if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) {
+ CreateAndAttachConsole();
+ }
+
+ // Initialize COM, so that it is available for use in the library and/or
+ // plugins.
+ ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED);
+
+ flutter::DartProject project(L"data");
+
+ std::vector command_line_arguments =
+ GetCommandLineArguments();
+
+ project.set_dart_entrypoint_arguments(std::move(command_line_arguments));
+
+ FlutterWindow window(project);
+ Win32Window::Point origin(10, 10);
+ Win32Window::Size size(1280, 720);
+ if (!window.Create(L"powersync_flutter_demo", origin, size)) {
+ return EXIT_FAILURE;
+ }
+ window.SetQuitOnClose(true);
+
+ ::MSG msg;
+ while (::GetMessage(&msg, nullptr, 0, 0)) {
+ ::TranslateMessage(&msg);
+ ::DispatchMessage(&msg);
+ }
+
+ ::CoUninitialize();
+ return EXIT_SUCCESS;
+}
diff --git a/demos/firebase-nodejs-todolist/windows/runner/resource.h b/demos/firebase-nodejs-todolist/windows/runner/resource.h
new file mode 100644
index 00000000..66a65d1e
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/windows/runner/resource.h
@@ -0,0 +1,16 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by Runner.rc
+//
+#define IDI_APP_ICON 101
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE 102
+#define _APS_NEXT_COMMAND_VALUE 40001
+#define _APS_NEXT_CONTROL_VALUE 1001
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif
diff --git a/demos/firebase-nodejs-todolist/windows/runner/resources/app_icon.ico b/demos/firebase-nodejs-todolist/windows/runner/resources/app_icon.ico
new file mode 100644
index 00000000..c04e20ca
Binary files /dev/null and b/demos/firebase-nodejs-todolist/windows/runner/resources/app_icon.ico differ
diff --git a/demos/firebase-nodejs-todolist/windows/runner/runner.exe.manifest b/demos/firebase-nodejs-todolist/windows/runner/runner.exe.manifest
new file mode 100644
index 00000000..a42ea768
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/windows/runner/runner.exe.manifest
@@ -0,0 +1,20 @@
+
+
+
+
+ PerMonitorV2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demos/firebase-nodejs-todolist/windows/runner/utils.cpp b/demos/firebase-nodejs-todolist/windows/runner/utils.cpp
new file mode 100644
index 00000000..f5bf9fa0
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/windows/runner/utils.cpp
@@ -0,0 +1,64 @@
+#include "utils.h"
+
+#include
+#include
+#include
+#include
+
+#include
+
+void CreateAndAttachConsole() {
+ if (::AllocConsole()) {
+ FILE *unused;
+ if (freopen_s(&unused, "CONOUT$", "w", stdout)) {
+ _dup2(_fileno(stdout), 1);
+ }
+ if (freopen_s(&unused, "CONOUT$", "w", stderr)) {
+ _dup2(_fileno(stdout), 2);
+ }
+ std::ios::sync_with_stdio();
+ FlutterDesktopResyncOutputStreams();
+ }
+}
+
+std::vector GetCommandLineArguments() {
+ // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use.
+ int argc;
+ wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc);
+ if (argv == nullptr) {
+ return std::vector();
+ }
+
+ std::vector command_line_arguments;
+
+ // Skip the first argument as it's the binary name.
+ for (int i = 1; i < argc; i++) {
+ command_line_arguments.push_back(Utf8FromUtf16(argv[i]));
+ }
+
+ ::LocalFree(argv);
+
+ return command_line_arguments;
+}
+
+std::string Utf8FromUtf16(const wchar_t* utf16_string) {
+ if (utf16_string == nullptr) {
+ return std::string();
+ }
+ int target_length = ::WideCharToMultiByte(
+ CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string,
+ -1, nullptr, 0, nullptr, nullptr);
+ std::string utf8_string;
+ if (target_length == 0 || target_length > utf8_string.max_size()) {
+ return utf8_string;
+ }
+ utf8_string.resize(target_length);
+ int converted_length = ::WideCharToMultiByte(
+ CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string,
+ -1, utf8_string.data(),
+ target_length, nullptr, nullptr);
+ if (converted_length == 0) {
+ return std::string();
+ }
+ return utf8_string;
+}
diff --git a/demos/firebase-nodejs-todolist/windows/runner/utils.h b/demos/firebase-nodejs-todolist/windows/runner/utils.h
new file mode 100644
index 00000000..3879d547
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/windows/runner/utils.h
@@ -0,0 +1,19 @@
+#ifndef RUNNER_UTILS_H_
+#define RUNNER_UTILS_H_
+
+#include
+#include
+
+// Creates a console for the process, and redirects stdout and stderr to
+// it for both the runner and the Flutter library.
+void CreateAndAttachConsole();
+
+// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string
+// encoded in UTF-8. Returns an empty std::string on failure.
+std::string Utf8FromUtf16(const wchar_t* utf16_string);
+
+// Gets the command line arguments passed in as a std::vector,
+// encoded in UTF-8. Returns an empty std::vector on failure.
+std::vector GetCommandLineArguments();
+
+#endif // RUNNER_UTILS_H_
diff --git a/demos/firebase-nodejs-todolist/windows/runner/win32_window.cpp b/demos/firebase-nodejs-todolist/windows/runner/win32_window.cpp
new file mode 100644
index 00000000..041a3855
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/windows/runner/win32_window.cpp
@@ -0,0 +1,288 @@
+#include "win32_window.h"
+
+#include
+#include
+
+#include "resource.h"
+
+namespace {
+
+/// Window attribute that enables dark mode window decorations.
+///
+/// Redefined in case the developer's machine has a Windows SDK older than
+/// version 10.0.22000.0.
+/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute
+#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE
+#define DWMWA_USE_IMMERSIVE_DARK_MODE 20
+#endif
+
+constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW";
+
+/// Registry key for app theme preference.
+///
+/// A value of 0 indicates apps should use dark mode. A non-zero or missing
+/// value indicates apps should use light mode.
+constexpr const wchar_t kGetPreferredBrightnessRegKey[] =
+ L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize";
+constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme";
+
+// The number of Win32Window objects that currently exist.
+static int g_active_window_count = 0;
+
+using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd);
+
+// Scale helper to convert logical scaler values to physical using passed in
+// scale factor
+int Scale(int source, double scale_factor) {
+ return static_cast(source * scale_factor);
+}
+
+// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module.
+// This API is only needed for PerMonitor V1 awareness mode.
+void EnableFullDpiSupportIfAvailable(HWND hwnd) {
+ HMODULE user32_module = LoadLibraryA("User32.dll");
+ if (!user32_module) {
+ return;
+ }
+ auto enable_non_client_dpi_scaling =
+ reinterpret_cast(
+ GetProcAddress(user32_module, "EnableNonClientDpiScaling"));
+ if (enable_non_client_dpi_scaling != nullptr) {
+ enable_non_client_dpi_scaling(hwnd);
+ }
+ FreeLibrary(user32_module);
+}
+
+} // namespace
+
+// Manages the Win32Window's window class registration.
+class WindowClassRegistrar {
+ public:
+ ~WindowClassRegistrar() = default;
+
+ // Returns the singleton registar instance.
+ static WindowClassRegistrar* GetInstance() {
+ if (!instance_) {
+ instance_ = new WindowClassRegistrar();
+ }
+ return instance_;
+ }
+
+ // Returns the name of the window class, registering the class if it hasn't
+ // previously been registered.
+ const wchar_t* GetWindowClass();
+
+ // Unregisters the window class. Should only be called if there are no
+ // instances of the window.
+ void UnregisterWindowClass();
+
+ private:
+ WindowClassRegistrar() = default;
+
+ static WindowClassRegistrar* instance_;
+
+ bool class_registered_ = false;
+};
+
+WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr;
+
+const wchar_t* WindowClassRegistrar::GetWindowClass() {
+ if (!class_registered_) {
+ WNDCLASS window_class{};
+ window_class.hCursor = LoadCursor(nullptr, IDC_ARROW);
+ window_class.lpszClassName = kWindowClassName;
+ window_class.style = CS_HREDRAW | CS_VREDRAW;
+ window_class.cbClsExtra = 0;
+ window_class.cbWndExtra = 0;
+ window_class.hInstance = GetModuleHandle(nullptr);
+ window_class.hIcon =
+ LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON));
+ window_class.hbrBackground = 0;
+ window_class.lpszMenuName = nullptr;
+ window_class.lpfnWndProc = Win32Window::WndProc;
+ RegisterClass(&window_class);
+ class_registered_ = true;
+ }
+ return kWindowClassName;
+}
+
+void WindowClassRegistrar::UnregisterWindowClass() {
+ UnregisterClass(kWindowClassName, nullptr);
+ class_registered_ = false;
+}
+
+Win32Window::Win32Window() {
+ ++g_active_window_count;
+}
+
+Win32Window::~Win32Window() {
+ --g_active_window_count;
+ Destroy();
+}
+
+bool Win32Window::Create(const std::wstring& title,
+ const Point& origin,
+ const Size& size) {
+ Destroy();
+
+ const wchar_t* window_class =
+ WindowClassRegistrar::GetInstance()->GetWindowClass();
+
+ const POINT target_point = {static_cast(origin.x),
+ static_cast(origin.y)};
+ HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST);
+ UINT dpi = FlutterDesktopGetDpiForMonitor(monitor);
+ double scale_factor = dpi / 96.0;
+
+ HWND window = CreateWindow(
+ window_class, title.c_str(), WS_OVERLAPPEDWINDOW,
+ Scale(origin.x, scale_factor), Scale(origin.y, scale_factor),
+ Scale(size.width, scale_factor), Scale(size.height, scale_factor),
+ nullptr, nullptr, GetModuleHandle(nullptr), this);
+
+ if (!window) {
+ return false;
+ }
+
+ UpdateTheme(window);
+
+ return OnCreate();
+}
+
+bool Win32Window::Show() {
+ return ShowWindow(window_handle_, SW_SHOWNORMAL);
+}
+
+// static
+LRESULT CALLBACK Win32Window::WndProc(HWND const window,
+ UINT const message,
+ WPARAM const wparam,
+ LPARAM const lparam) noexcept {
+ if (message == WM_NCCREATE) {
+ auto window_struct = reinterpret_cast(lparam);
+ SetWindowLongPtr(window, GWLP_USERDATA,
+ reinterpret_cast(window_struct->lpCreateParams));
+
+ auto that = static_cast(window_struct->lpCreateParams);
+ EnableFullDpiSupportIfAvailable(window);
+ that->window_handle_ = window;
+ } else if (Win32Window* that = GetThisFromHandle(window)) {
+ return that->MessageHandler(window, message, wparam, lparam);
+ }
+
+ return DefWindowProc(window, message, wparam, lparam);
+}
+
+LRESULT
+Win32Window::MessageHandler(HWND hwnd,
+ UINT const message,
+ WPARAM const wparam,
+ LPARAM const lparam) noexcept {
+ switch (message) {
+ case WM_DESTROY:
+ window_handle_ = nullptr;
+ Destroy();
+ if (quit_on_close_) {
+ PostQuitMessage(0);
+ }
+ return 0;
+
+ case WM_DPICHANGED: {
+ auto newRectSize = reinterpret_cast(lparam);
+ LONG newWidth = newRectSize->right - newRectSize->left;
+ LONG newHeight = newRectSize->bottom - newRectSize->top;
+
+ SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth,
+ newHeight, SWP_NOZORDER | SWP_NOACTIVATE);
+
+ return 0;
+ }
+ case WM_SIZE: {
+ RECT rect = GetClientArea();
+ if (child_content_ != nullptr) {
+ // Size and position the child window.
+ MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left,
+ rect.bottom - rect.top, TRUE);
+ }
+ return 0;
+ }
+
+ case WM_ACTIVATE:
+ if (child_content_ != nullptr) {
+ SetFocus(child_content_);
+ }
+ return 0;
+
+ case WM_DWMCOLORIZATIONCOLORCHANGED:
+ UpdateTheme(hwnd);
+ return 0;
+ }
+
+ return DefWindowProc(window_handle_, message, wparam, lparam);
+}
+
+void Win32Window::Destroy() {
+ OnDestroy();
+
+ if (window_handle_) {
+ DestroyWindow(window_handle_);
+ window_handle_ = nullptr;
+ }
+ if (g_active_window_count == 0) {
+ WindowClassRegistrar::GetInstance()->UnregisterWindowClass();
+ }
+}
+
+Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept {
+ return reinterpret_cast(
+ GetWindowLongPtr(window, GWLP_USERDATA));
+}
+
+void Win32Window::SetChildContent(HWND content) {
+ child_content_ = content;
+ SetParent(content, window_handle_);
+ RECT frame = GetClientArea();
+
+ MoveWindow(content, frame.left, frame.top, frame.right - frame.left,
+ frame.bottom - frame.top, true);
+
+ SetFocus(child_content_);
+}
+
+RECT Win32Window::GetClientArea() {
+ RECT frame;
+ GetClientRect(window_handle_, &frame);
+ return frame;
+}
+
+HWND Win32Window::GetHandle() {
+ return window_handle_;
+}
+
+void Win32Window::SetQuitOnClose(bool quit_on_close) {
+ quit_on_close_ = quit_on_close;
+}
+
+bool Win32Window::OnCreate() {
+ // No-op; provided for subclasses.
+ return true;
+}
+
+void Win32Window::OnDestroy() {
+ // No-op; provided for subclasses.
+}
+
+void Win32Window::UpdateTheme(HWND const window) {
+ DWORD light_mode;
+ DWORD light_mode_size = sizeof(light_mode);
+ LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey,
+ kGetPreferredBrightnessRegValue,
+ RRF_RT_REG_DWORD, nullptr, &light_mode,
+ &light_mode_size);
+
+ if (result == ERROR_SUCCESS) {
+ BOOL enable_dark_mode = light_mode == 0;
+ DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE,
+ &enable_dark_mode, sizeof(enable_dark_mode));
+ }
+}
diff --git a/demos/firebase-nodejs-todolist/windows/runner/win32_window.h b/demos/firebase-nodejs-todolist/windows/runner/win32_window.h
new file mode 100644
index 00000000..c86632d8
--- /dev/null
+++ b/demos/firebase-nodejs-todolist/windows/runner/win32_window.h
@@ -0,0 +1,102 @@
+#ifndef RUNNER_WIN32_WINDOW_H_
+#define RUNNER_WIN32_WINDOW_H_
+
+#include
+
+#include
+#include
+#include
+
+// A class abstraction for a high DPI-aware Win32 Window. Intended to be
+// inherited from by classes that wish to specialize with custom
+// rendering and input handling
+class Win32Window {
+ public:
+ struct Point {
+ unsigned int x;
+ unsigned int y;
+ Point(unsigned int x, unsigned int y) : x(x), y(y) {}
+ };
+
+ struct Size {
+ unsigned int width;
+ unsigned int height;
+ Size(unsigned int width, unsigned int height)
+ : width(width), height(height) {}
+ };
+
+ Win32Window();
+ virtual ~Win32Window();
+
+ // Creates a win32 window with |title| that is positioned and sized using
+ // |origin| and |size|. New windows are created on the default monitor. Window
+ // sizes are specified to the OS in physical pixels, hence to ensure a
+ // consistent size this function will scale the inputted width and height as
+ // as appropriate for the default monitor. The window is invisible until
+ // |Show| is called. Returns true if the window was created successfully.
+ bool Create(const std::wstring& title, const Point& origin, const Size& size);
+
+ // Show the current window. Returns true if the window was successfully shown.
+ bool Show();
+
+ // Release OS resources associated with window.
+ void Destroy();
+
+ // Inserts |content| into the window tree.
+ void SetChildContent(HWND content);
+
+ // Returns the backing Window handle to enable clients to set icon and other
+ // window properties. Returns nullptr if the window has been destroyed.
+ HWND GetHandle();
+
+ // If true, closing this window will quit the application.
+ void SetQuitOnClose(bool quit_on_close);
+
+ // Return a RECT representing the bounds of the current client area.
+ RECT GetClientArea();
+
+ protected:
+ // Processes and route salient window messages for mouse handling,
+ // size change and DPI. Delegates handling of these to member overloads that
+ // inheriting classes can handle.
+ virtual LRESULT MessageHandler(HWND window,
+ UINT const message,
+ WPARAM const wparam,
+ LPARAM const lparam) noexcept;
+
+ // Called when CreateAndShow is called, allowing subclass window-related
+ // setup. Subclasses should return false if setup fails.
+ virtual bool OnCreate();
+
+ // Called when Destroy is called.
+ virtual void OnDestroy();
+
+ private:
+ friend class WindowClassRegistrar;
+
+ // OS callback called by message pump. Handles the WM_NCCREATE message which
+ // is passed when the non-client area is being created and enables automatic
+ // non-client DPI scaling so that the non-client area automatically
+ // responsponds to changes in DPI. All other messages are handled by
+ // MessageHandler.
+ static LRESULT CALLBACK WndProc(HWND const window,
+ UINT const message,
+ WPARAM const wparam,
+ LPARAM const lparam) noexcept;
+
+ // Retrieves a class instance pointer for |window|
+ static Win32Window* GetThisFromHandle(HWND const window) noexcept;
+
+ // Update the window frame's theme to match the system theme.
+ static void UpdateTheme(HWND const window);
+
+ bool quit_on_close_ = false;
+
+ // window handle for top level window.
+ HWND window_handle_ = nullptr;
+
+ // window handle for hosted content.
+ HWND child_content_ = nullptr;
+};
+
+#endif // RUNNER_WIN32_WINDOW_H_
diff --git a/demos/supabase-anonymous-auth/.gitignore b/demos/supabase-anonymous-auth/.gitignore
index 0b04140a..777f9a68 100644
--- a/demos/supabase-anonymous-auth/.gitignore
+++ b/demos/supabase-anonymous-auth/.gitignore
@@ -5,9 +5,11 @@
*.swp
.DS_Store
.atom/
+.build/
.buildlog/
.history
.svn/
+.swiftpm/
migrate_working_dir/
# IntelliJ related
diff --git a/demos/supabase-anonymous-auth/ios/Flutter/AppFrameworkInfo.plist b/demos/supabase-anonymous-auth/ios/Flutter/AppFrameworkInfo.plist
index 9625e105..7c569640 100644
--- a/demos/supabase-anonymous-auth/ios/Flutter/AppFrameworkInfo.plist
+++ b/demos/supabase-anonymous-auth/ios/Flutter/AppFrameworkInfo.plist
@@ -21,6 +21,6 @@
CFBundleVersion
1.0
MinimumOSVersion
- 11.0
+ 12.0
diff --git a/demos/supabase-anonymous-auth/ios/Podfile b/demos/supabase-anonymous-auth/ios/Podfile
index bab7dec0..2c1e086a 100644
--- a/demos/supabase-anonymous-auth/ios/Podfile
+++ b/demos/supabase-anonymous-auth/ios/Podfile
@@ -1,5 +1,5 @@
# Uncomment this line to define a global platform for your project
-# platform :ios, '11.0'
+platform :ios, '13.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
@@ -45,4 +45,4 @@ post_install do |installer|
end
end
end
-end
\ No newline at end of file
+end
diff --git a/demos/supabase-anonymous-auth/ios/Podfile.lock b/demos/supabase-anonymous-auth/ios/Podfile.lock
index 73885df0..77f7310a 100644
--- a/demos/supabase-anonymous-auth/ios/Podfile.lock
+++ b/demos/supabase-anonymous-auth/ios/Podfile.lock
@@ -1,28 +1,37 @@
PODS:
- - app_links (0.0.1):
- - Flutter
- - camera_avfoundation (0.0.1):
+ - app_links (0.0.2):
- Flutter
- Flutter (1.0.0)
- path_provider_foundation (0.0.1):
- Flutter
- FlutterMacOS
+ - powersync-sqlite-core (0.4.5)
+ - powersync_flutter_libs (0.0.1):
+ - Flutter
+ - powersync-sqlite-core (~> 0.4.5)
- shared_preferences_foundation (0.0.1):
- Flutter
- FlutterMacOS
- - sqlite3 (3.44.0):
- - sqlite3/common (= 3.44.0)
- - sqlite3/common (3.44.0)
- - sqlite3/fts5 (3.44.0):
+ - sqlite3 (3.49.2):
+ - sqlite3/common (= 3.49.2)
+ - sqlite3/common (3.49.2)
+ - sqlite3/dbstatvtab (3.49.2):
+ - sqlite3/common
+ - sqlite3/fts5 (3.49.2):
- sqlite3/common
- - sqlite3/perf-threadsafe (3.44.0):
+ - sqlite3/math (3.49.2):
- sqlite3/common
- - sqlite3/rtree (3.44.0):
+ - sqlite3/perf-threadsafe (3.49.2):
+ - sqlite3/common
+ - sqlite3/rtree (3.49.2):
- sqlite3/common
- sqlite3_flutter_libs (0.0.1):
- Flutter
- - sqlite3 (~> 3.44.0)
+ - FlutterMacOS
+ - sqlite3 (~> 3.49.1)
+ - sqlite3/dbstatvtab
- sqlite3/fts5
+ - sqlite3/math
- sqlite3/perf-threadsafe
- sqlite3/rtree
- url_launcher_ios (0.0.1):
@@ -30,43 +39,45 @@ PODS:
DEPENDENCIES:
- app_links (from `.symlinks/plugins/app_links/ios`)
- - camera_avfoundation (from `.symlinks/plugins/camera_avfoundation/ios`)
- Flutter (from `Flutter`)
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
+ - powersync_flutter_libs (from `.symlinks/plugins/powersync_flutter_libs/ios`)
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
- - sqlite3_flutter_libs (from `.symlinks/plugins/sqlite3_flutter_libs/ios`)
+ - sqlite3_flutter_libs (from `.symlinks/plugins/sqlite3_flutter_libs/darwin`)
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
SPEC REPOS:
trunk:
+ - powersync-sqlite-core
- sqlite3
EXTERNAL SOURCES:
app_links:
:path: ".symlinks/plugins/app_links/ios"
- camera_avfoundation:
- :path: ".symlinks/plugins/camera_avfoundation/ios"
Flutter:
:path: Flutter
path_provider_foundation:
:path: ".symlinks/plugins/path_provider_foundation/darwin"
+ powersync_flutter_libs:
+ :path: ".symlinks/plugins/powersync_flutter_libs/ios"
shared_preferences_foundation:
:path: ".symlinks/plugins/shared_preferences_foundation/darwin"
sqlite3_flutter_libs:
- :path: ".symlinks/plugins/sqlite3_flutter_libs/ios"
+ :path: ".symlinks/plugins/sqlite3_flutter_libs/darwin"
url_launcher_ios:
:path: ".symlinks/plugins/url_launcher_ios/ios"
SPEC CHECKSUMS:
- app_links: 5ef33d0d295a89d9d16bb81b0e3b0d5f70d6c875
- camera_avfoundation: 3125e8cd1a4387f6f31c6c63abb8a55892a9eeeb
- Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
- path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943
- shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126
- sqlite3: 6e2d4a4879854d0ec86b476bf3c3e30870bac273
- sqlite3_flutter_libs: eb769059df0356dc52ddda040f09cacc9391a7cf
- url_launcher_ios: bf5ce03e0e2088bad9cc378ea97fa0ed5b49673b
+ app_links: 76b66b60cc809390ca1ad69bfd66b998d2387ac7
+ Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467
+ path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
+ powersync-sqlite-core: 6f32860379009d2a37cadc9e9427a431bdbd83c8
+ powersync_flutter_libs: 7684a62208907328906eb932f1fc8b3d8879974e
+ shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
+ sqlite3: 3c950dc86011117c307eb0b28c4a7bb449dce9f1
+ sqlite3_flutter_libs: f6acaa2172e6bb3e2e70c771661905080e8ebcf2
+ url_launcher_ios: 694010445543906933d732453a59da0a173ae33d
-PODFILE CHECKSUM: adb9c9fb405cdaf8ac7cbd45ad6db78acaa58c33
+PODFILE CHECKSUM: 2c1730c97ea13f1ea48b32e9c79de785b4f2f02f
-COCOAPODS: 1.14.3
+COCOAPODS: 1.16.2
diff --git a/demos/supabase-anonymous-auth/ios/Runner.xcodeproj/project.pbxproj b/demos/supabase-anonymous-auth/ios/Runner.xcodeproj/project.pbxproj
index 6a93f233..16636b7a 100644
--- a/demos/supabase-anonymous-auth/ios/Runner.xcodeproj/project.pbxproj
+++ b/demos/supabase-anonymous-auth/ios/Runner.xcodeproj/project.pbxproj
@@ -155,7 +155,7 @@
97C146E61CF9000F007C117D /* Project object */ = {
isa = PBXProject;
attributes = {
- LastUpgradeCheck = 1430;
+ LastUpgradeCheck = 1510;
ORGANIZATIONNAME = "";
TargetAttributes = {
97C146ED1CF9000F007C117D = {
@@ -342,7 +342,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
@@ -419,7 +419,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
@@ -468,7 +468,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
diff --git a/demos/supabase-anonymous-auth/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/demos/supabase-anonymous-auth/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
index a6b826db..c53e2b31 100644
--- a/demos/supabase-anonymous-auth/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
+++ b/demos/supabase-anonymous-auth/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -1,6 +1,6 @@
diff --git a/demos/supabase-anonymous-auth/ios/Runner/AppDelegate.swift b/demos/supabase-anonymous-auth/ios/Runner/AppDelegate.swift
index 70693e4a..b6363034 100644
--- a/demos/supabase-anonymous-auth/ios/Runner/AppDelegate.swift
+++ b/demos/supabase-anonymous-auth/ios/Runner/AppDelegate.swift
@@ -1,7 +1,7 @@
import UIKit
import Flutter
-@UIApplicationMain
+@main
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
diff --git a/demos/supabase-anonymous-auth/macos/Podfile b/demos/supabase-anonymous-auth/macos/Podfile
index c795730d..b52666a1 100644
--- a/demos/supabase-anonymous-auth/macos/Podfile
+++ b/demos/supabase-anonymous-auth/macos/Podfile
@@ -1,4 +1,4 @@
-platform :osx, '10.14'
+platform :osx, '10.15'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
diff --git a/demos/supabase-anonymous-auth/macos/Podfile.lock b/demos/supabase-anonymous-auth/macos/Podfile.lock
index f54327c0..6983b2da 100644
--- a/demos/supabase-anonymous-auth/macos/Podfile.lock
+++ b/demos/supabase-anonymous-auth/macos/Podfile.lock
@@ -5,24 +5,33 @@ PODS:
- path_provider_foundation (0.0.1):
- Flutter
- FlutterMacOS
+ - powersync-sqlite-core (0.4.5)
+ - powersync_flutter_libs (0.0.1):
+ - FlutterMacOS
+ - powersync-sqlite-core (~> 0.4.5)
- shared_preferences_foundation (0.0.1):
- Flutter
- FlutterMacOS
- - sign_in_with_apple (0.0.1):
- - FlutterMacOS
- - sqlite3 (3.43.1):
- - sqlite3/common (= 3.43.1)
- - sqlite3/common (3.43.1)
- - sqlite3/fts5 (3.43.1):
+ - sqlite3 (3.49.2):
+ - sqlite3/common (= 3.49.2)
+ - sqlite3/common (3.49.2)
+ - sqlite3/dbstatvtab (3.49.2):
+ - sqlite3/common
+ - sqlite3/fts5 (3.49.2):
- sqlite3/common
- - sqlite3/perf-threadsafe (3.43.1):
+ - sqlite3/math (3.49.2):
- sqlite3/common
- - sqlite3/rtree (3.43.1):
+ - sqlite3/perf-threadsafe (3.49.2):
+ - sqlite3/common
+ - sqlite3/rtree (3.49.2):
- sqlite3/common
- sqlite3_flutter_libs (0.0.1):
+ - Flutter
- FlutterMacOS
- - sqlite3 (~> 3.43.1)
+ - sqlite3 (~> 3.49.1)
+ - sqlite3/dbstatvtab
- sqlite3/fts5
+ - sqlite3/math
- sqlite3/perf-threadsafe
- sqlite3/rtree
- url_launcher_macos (0.0.1):
@@ -32,13 +41,14 @@ DEPENDENCIES:
- app_links (from `Flutter/ephemeral/.symlinks/plugins/app_links/macos`)
- FlutterMacOS (from `Flutter/ephemeral`)
- path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`)
+ - powersync_flutter_libs (from `Flutter/ephemeral/.symlinks/plugins/powersync_flutter_libs/macos`)
- shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`)
- - sign_in_with_apple (from `Flutter/ephemeral/.symlinks/plugins/sign_in_with_apple/macos`)
- - sqlite3_flutter_libs (from `Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/macos`)
+ - sqlite3_flutter_libs (from `Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/darwin`)
- url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`)
SPEC REPOS:
trunk:
+ - powersync-sqlite-core
- sqlite3
EXTERNAL SOURCES:
@@ -48,25 +58,26 @@ EXTERNAL SOURCES:
:path: Flutter/ephemeral
path_provider_foundation:
:path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin
+ powersync_flutter_libs:
+ :path: Flutter/ephemeral/.symlinks/plugins/powersync_flutter_libs/macos
shared_preferences_foundation:
:path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin
- sign_in_with_apple:
- :path: Flutter/ephemeral/.symlinks/plugins/sign_in_with_apple/macos
sqlite3_flutter_libs:
- :path: Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/macos
+ :path: Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/darwin
url_launcher_macos:
:path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos
SPEC CHECKSUMS:
- app_links: 4481ed4d71f384b0c3ae5016f4633aa73d32ff67
- FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
- path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943
- shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126
- sign_in_with_apple: a9e97e744e8edc36aefc2723111f652102a7a727
- sqlite3: e0a0623a33a20a47cb5921552aebc6e9e437dc91
- sqlite3_flutter_libs: a91655e4a75a499364f693041aa1c6d1b36b66d0
- url_launcher_macos: d2691c7dd33ed713bf3544850a623080ec693d95
+ app_links: afe860c55c7ef176cea7fb630a2b7d7736de591d
+ FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1
+ path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
+ powersync-sqlite-core: 6f32860379009d2a37cadc9e9427a431bdbd83c8
+ powersync_flutter_libs: 41d8a7b193abf15e46f95f0ec1229d86b6893171
+ shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
+ sqlite3: 3c950dc86011117c307eb0b28c4a7bb449dce9f1
+ sqlite3_flutter_libs: f6acaa2172e6bb3e2e70c771661905080e8ebcf2
+ url_launcher_macos: 0fba8ddabfc33ce0a9afe7c5fef5aab3d8d2d673
-PODFILE CHECKSUM: 236401fc2c932af29a9fcf0e97baeeb2d750d367
+PODFILE CHECKSUM: 9ebaf0ce3d369aaa26a9ea0e159195ed94724cf3
-COCOAPODS: 1.12.1
+COCOAPODS: 1.16.2
diff --git a/demos/supabase-anonymous-auth/pubspec.lock b/demos/supabase-anonymous-auth/pubspec.lock
index 452c0ea1..48c25b82 100644
--- a/demos/supabase-anonymous-auth/pubspec.lock
+++ b/demos/supabase-anonymous-auth/pubspec.lock
@@ -5,42 +5,66 @@ packages:
dependency: transitive
description:
name: app_links
- sha256: "3ced568a5d9e309e99af71285666f1f3117bddd0bd5b3317979dccc1a40cada4"
+ sha256: "85ed8fc1d25a76475914fff28cc994653bd900bc2c26e4b57a49e097febb54ba"
url: "https://pub.dev"
source: hosted
- version: "3.5.1"
+ version: "6.4.0"
+ app_links_linux:
+ dependency: transitive
+ description:
+ name: app_links_linux
+ sha256: f5f7173a78609f3dfd4c2ff2c95bd559ab43c80a87dc6a095921d96c05688c81
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.3"
+ app_links_platform_interface:
+ dependency: transitive
+ description:
+ name: app_links_platform_interface
+ sha256: "05f5379577c513b534a29ddea68176a4d4802c46180ee8e2e966257158772a3f"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.2"
+ app_links_web:
+ dependency: transitive
+ description:
+ name: app_links_web
+ sha256: af060ed76183f9e2b87510a9480e56a5352b6c249778d07bd2c95fc35632a555
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.4"
args:
dependency: transitive
description:
name: args
- sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a"
+ sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
url: "https://pub.dev"
source: hosted
- version: "2.5.0"
+ version: "2.7.0"
async:
dependency: transitive
description:
name: async
- sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
+ sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb"
url: "https://pub.dev"
source: hosted
- version: "2.11.0"
+ version: "2.13.0"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
- sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
+ sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
url: "https://pub.dev"
source: hosted
- version: "2.1.1"
+ version: "2.1.2"
characters:
dependency: transitive
description:
name: characters
- sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
+ sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
url: "https://pub.dev"
source: hosted
- version: "1.3.0"
+ version: "1.4.0"
checked_yaml:
dependency: transitive
description:
@@ -53,74 +77,58 @@ packages:
dependency: transitive
description:
name: clock
- sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
+ sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
url: "https://pub.dev"
source: hosted
- version: "1.1.1"
+ version: "1.1.2"
collection:
dependency: transitive
description:
name: collection
- sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
+ sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
url: "https://pub.dev"
source: hosted
- version: "1.18.0"
+ version: "1.19.1"
crypto:
dependency: transitive
description:
name: crypto
- sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab
+ sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855"
url: "https://pub.dev"
source: hosted
- version: "3.0.3"
+ version: "3.0.6"
fake_async:
dependency: transitive
description:
name: fake_async
- sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
+ sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
url: "https://pub.dev"
source: hosted
- version: "1.3.1"
- fetch_api:
- dependency: transitive
- description:
- name: fetch_api
- sha256: "97f46c25b480aad74f7cc2ad7ccba2c5c6f08d008e68f95c1077286ce243d0e6"
- url: "https://pub.dev"
- source: hosted
- version: "2.2.0"
- fetch_client:
- dependency: transitive
- description:
- name: fetch_client
- sha256: "9666ee14536778474072245ed5cba07db81ae8eb5de3b7bf4a2d1e2c49696092"
- url: "https://pub.dev"
- source: hosted
- version: "1.1.2"
+ version: "1.3.3"
ffi:
dependency: transitive
description:
name: ffi
- sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21"
+ sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418"
url: "https://pub.dev"
source: hosted
- version: "2.1.2"
+ version: "2.1.4"
file:
dependency: transitive
description:
name: file
- sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c"
+ sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4
url: "https://pub.dev"
source: hosted
- version: "7.0.0"
+ version: "7.0.1"
fixnum:
dependency: transitive
description:
name: fixnum
- sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1"
+ sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be
url: "https://pub.dev"
source: hosted
- version: "1.1.0"
+ version: "1.1.1"
flutter:
dependency: "direct main"
description: flutter
@@ -148,18 +156,18 @@ packages:
dependency: transitive
description:
name: functions_client
- sha256: "9a0ab83a525c8691a6724746e642de755a299afa04158807787364cd9e718001"
+ sha256: b410e4d609522357396cd84bb9a8f6e3a4561b5f7d3ce82267f6f1c2af42f16b
url: "https://pub.dev"
source: hosted
- version: "2.0.0"
+ version: "2.4.2"
gotrue:
dependency: transitive
description:
name: gotrue
- sha256: a0eee21a7e8ec09e6bbd5c9a36e31e423827b575ba6fc2dd049805dcfaac5b02
+ sha256: "04a6efacffd42773ed96dc752f19bb20a1fbc383e81ba82659072b775cf62912"
url: "https://pub.dev"
source: hosted
- version: "2.6.0"
+ version: "2.12.0"
gtk:
dependency: transitive
description:
@@ -172,26 +180,18 @@ packages:
dependency: transitive
description:
name: http
- sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010
+ sha256: "2c11f3f94c687ee9bad77c171151672986360b2b001d109814ee7140b2cf261b"
url: "https://pub.dev"
source: hosted
- version: "1.2.2"
+ version: "1.4.0"
http_parser:
dependency: transitive
description:
name: http_parser
- sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b"
- url: "https://pub.dev"
- source: hosted
- version: "4.0.2"
- js:
- dependency: transitive
- description:
- name: js
- sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf
+ sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
url: "https://pub.dev"
source: hosted
- version: "0.7.1"
+ version: "4.1.2"
json_annotation:
dependency: transitive
description:
@@ -212,18 +212,18 @@ packages:
dependency: transitive
description:
name: leak_tracker
- sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05"
+ sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0"
url: "https://pub.dev"
source: hosted
- version: "10.0.5"
+ version: "10.0.9"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
- sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806"
+ sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
url: "https://pub.dev"
source: hosted
- version: "3.0.5"
+ version: "3.0.9"
leak_tracker_testing:
dependency: transitive
description:
@@ -244,18 +244,18 @@ packages:
dependency: "direct main"
description:
name: logging
- sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340"
+ sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
url: "https://pub.dev"
source: hosted
- version: "1.2.0"
+ version: "1.3.0"
matcher:
dependency: transitive
description:
name: matcher
- sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
+ sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
url: "https://pub.dev"
source: hosted
- version: "0.12.16+1"
+ version: "0.12.17"
material_color_utilities:
dependency: transitive
description:
@@ -268,18 +268,18 @@ packages:
dependency: transitive
description:
name: meta
- sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
+ sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
url: "https://pub.dev"
source: hosted
- version: "1.15.0"
+ version: "1.16.0"
mime:
dependency: transitive
description:
name: mime
- sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2"
+ sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6"
url: "https://pub.dev"
source: hosted
- version: "1.0.5"
+ version: "2.0.0"
mutex:
dependency: transitive
description:
@@ -292,34 +292,34 @@ packages:
dependency: "direct main"
description:
name: path
- sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
+ sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
url: "https://pub.dev"
source: hosted
- version: "1.9.0"
+ version: "1.9.1"
path_provider:
dependency: "direct main"
description:
name: path_provider
- sha256: b27217933eeeba8ff24845c34003b003b2b22151de3c908d0e679e8fe1aa078b
+ sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd"
url: "https://pub.dev"
source: hosted
- version: "2.1.2"
+ version: "2.1.5"
path_provider_android:
dependency: transitive
description:
name: path_provider_android
- sha256: "51f0d2c554cfbc9d6a312ab35152fc77e2f0b758ce9f1a444a3a1e5b8f3c6b7f"
+ sha256: d0d310befe2c8ab9e7f393288ccbb11b60c019c6b5afc21973eeee4dda2b35e9
url: "https://pub.dev"
source: hosted
- version: "2.2.3"
+ version: "2.2.17"
path_provider_foundation:
dependency: transitive
description:
name: path_provider_foundation
- sha256: "5a7999be66e000916500be4f15a3633ebceb8302719b47b9cc49ce924125350f"
+ sha256: "4843174df4d288f5e29185bd6e72a6fbdf5a4a4602717eed565497429f179942"
url: "https://pub.dev"
source: hosted
- version: "2.3.2"
+ version: "2.4.1"
path_provider_linux:
dependency: transitive
description:
@@ -340,18 +340,18 @@ packages:
dependency: transitive
description:
name: path_provider_windows
- sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170"
+ sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7
url: "https://pub.dev"
source: hosted
- version: "2.2.1"
+ version: "2.3.0"
platform:
dependency: transitive
description:
name: platform
- sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec"
+ sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984"
url: "https://pub.dev"
source: hosted
- version: "3.1.4"
+ version: "3.1.6"
plugin_platform_interface:
dependency: transitive
description:
@@ -364,48 +364,55 @@ packages:
dependency: transitive
description:
name: postgrest
- sha256: "9a3b590cf123f8d323b6a918702e037f037027d12a01902f9dc6ee38fdc05d6c"
+ sha256: "10b81a23b1c829ccadf68c626b4d66666453a1474d24c563f313f5ca7851d575"
url: "https://pub.dev"
source: hosted
- version: "2.1.1"
+ version: "2.4.2"
powersync:
dependency: "direct main"
description:
path: "../../packages/powersync"
relative: true
source: path
- version: "1.9.2"
+ version: "1.15.0"
+ powersync_core:
+ dependency: "direct overridden"
+ description:
+ path: "../../packages/powersync_core"
+ relative: true
+ source: path
+ version: "1.5.0"
powersync_flutter_libs:
dependency: "direct overridden"
description:
path: "../../packages/powersync_flutter_libs"
relative: true
source: path
- version: "0.4.2"
+ version: "0.4.10"
pub_semver:
dependency: transitive
description:
name: pub_semver
- sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c"
+ sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585"
url: "https://pub.dev"
source: hosted
- version: "2.1.4"
+ version: "2.2.0"
pubspec_parse:
dependency: transitive
description:
name: pubspec_parse
- sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8
+ sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082"
url: "https://pub.dev"
source: hosted
- version: "1.3.0"
+ version: "1.5.0"
realtime_client:
dependency: transitive
description:
name: realtime_client
- sha256: bb6747fe2feff7f8349d563ac9d4a8f10ac2dd809bdff1e7e319321d5ea16b49
+ sha256: "3a0a99b5bd0fc3b35e8ee846d9a22fa2c2117f7ef1cb73d1e5f08f6c3d09c4e9"
url: "https://pub.dev"
source: hosted
- version: "2.0.3"
+ version: "2.5.0"
retry:
dependency: transitive
description:
@@ -418,79 +425,79 @@ packages:
dependency: transitive
description:
name: rxdart
- sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb"
+ sha256: "5c3004a4a8dbb94bd4bf5412a4def4acdaa12e12f269737a5751369e12d1a962"
url: "https://pub.dev"
source: hosted
- version: "0.27.7"
+ version: "0.28.0"
shared_preferences:
dependency: transitive
description:
name: shared_preferences
- sha256: "81429e4481e1ccfb51ede496e916348668fd0921627779233bd24cc3ff6abd02"
+ sha256: "6e8bf70b7fef813df4e9a36f658ac46d107db4b4cfe1048b477d4e453a8159f5"
url: "https://pub.dev"
source: hosted
- version: "2.2.2"
+ version: "2.5.3"
shared_preferences_android:
dependency: transitive
description:
name: shared_preferences_android
- sha256: "8568a389334b6e83415b6aae55378e158fbc2314e074983362d20c562780fb06"
+ sha256: "20cbd561f743a342c76c151d6ddb93a9ce6005751e7aa458baad3858bfbfb6ac"
url: "https://pub.dev"
source: hosted
- version: "2.2.1"
+ version: "2.4.10"
shared_preferences_foundation:
dependency: transitive
description:
name: shared_preferences_foundation
- sha256: "7708d83064f38060c7b39db12aefe449cb8cdc031d6062280087bc4cdb988f5c"
+ sha256: "6a52cfcdaeac77cad8c97b539ff688ccfc458c007b4db12be584fbe5c0e49e03"
url: "https://pub.dev"
source: hosted
- version: "2.3.5"
+ version: "2.5.4"
shared_preferences_linux:
dependency: transitive
description:
name: shared_preferences_linux
- sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa"
+ sha256: "580abfd40f415611503cae30adf626e6656dfb2f0cee8f465ece7b6defb40f2f"
url: "https://pub.dev"
source: hosted
- version: "2.3.2"
+ version: "2.4.1"
shared_preferences_platform_interface:
dependency: transitive
description:
name: shared_preferences_platform_interface
- sha256: "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b"
+ sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80"
url: "https://pub.dev"
source: hosted
- version: "2.3.2"
+ version: "2.4.1"
shared_preferences_web:
dependency: transitive
description:
name: shared_preferences_web
- sha256: d762709c2bbe80626ecc819143013cc820fa49ca5e363620ee20a8b15a3e3daf
+ sha256: c49bd060261c9a3f0ff445892695d6212ff603ef3115edbb448509d407600019
url: "https://pub.dev"
source: hosted
- version: "2.2.1"
+ version: "2.4.3"
shared_preferences_windows:
dependency: transitive
description:
name: shared_preferences_windows
- sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59"
+ sha256: "94ef0f72b2d71bc3e700e025db3710911bd51a71cefb65cc609dd0d9a982e3c1"
url: "https://pub.dev"
source: hosted
- version: "2.3.2"
+ version: "2.4.1"
sky_engine:
dependency: transitive
description: flutter
source: sdk
- version: "0.0.99"
+ version: "0.0.0"
source_span:
dependency: transitive
description:
name: source_span
- sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
+ sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
url: "https://pub.dev"
source: hosted
- version: "1.10.0"
+ version: "1.10.1"
sprintf:
dependency: transitive
description:
@@ -503,106 +510,106 @@ packages:
dependency: transitive
description:
name: sqlite3
- sha256: bb174b3ec2527f9c5f680f73a89af8149dd99782fbb56ea88ad0807c5638f2ed
+ sha256: "310af39c40dd0bb2058538333c9d9840a2725ae0b9f77e4fd09ad6696aa8f66e"
url: "https://pub.dev"
source: hosted
- version: "2.4.7"
+ version: "2.7.5"
sqlite3_flutter_libs:
dependency: transitive
description:
name: sqlite3_flutter_libs
- sha256: "62bbb4073edbcdf53f40c80775f33eea01d301b7b81417e5b3fb7395416258c1"
+ sha256: "1a96b59227828d9eb1463191d684b37a27d66ee5ed7597fcf42eee6452c88a14"
url: "https://pub.dev"
source: hosted
- version: "0.5.24"
+ version: "0.5.32"
sqlite3_web:
dependency: transitive
description:
name: sqlite3_web
- sha256: f22d1dda7a40be0867984f55cdf5c2d599e5f05d3be4a642d78f38b38983f554
+ sha256: "967e076442f7e1233bd7241ca61f3efe4c7fc168dac0f38411bdb3bdf471eb3c"
url: "https://pub.dev"
source: hosted
- version: "0.2.0"
+ version: "0.3.1"
sqlite_async:
dependency: "direct main"
description:
name: sqlite_async
- sha256: d66fb6e6d07c1a834743326c033029f75becbb1fad6823d709f921872abc3d5b
+ sha256: a60e8d5c8df8e694933bd5a312c38393e79ad77d784bb91c6f38ba627bfb7aec
url: "https://pub.dev"
source: hosted
- version: "0.11.0"
+ version: "0.11.4"
stack_trace:
dependency: transitive
description:
name: stack_trace
- sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
+ sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
url: "https://pub.dev"
source: hosted
- version: "1.11.1"
+ version: "1.12.1"
storage_client:
dependency: transitive
description:
name: storage_client
- sha256: bf5589d5de61a2451edb1b8960a0e673d4bb5c42ecc4dddf7c051a93789ced34
+ sha256: "09bac4d75eea58e8113ca928e6655a09cc8059e6d1b472ee801f01fde815bcfc"
url: "https://pub.dev"
source: hosted
- version: "2.0.1"
+ version: "2.4.0"
stream_channel:
dependency: transitive
description:
name: stream_channel
- sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
+ sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
url: "https://pub.dev"
source: hosted
- version: "2.1.2"
+ version: "2.1.4"
string_scanner:
dependency: transitive
description:
name: string_scanner
- sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
+ sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
url: "https://pub.dev"
source: hosted
- version: "1.2.0"
+ version: "1.4.1"
supabase:
dependency: transitive
description:
name: supabase
- sha256: "2ddedf13f6dc013084569673dff7a7d540f5eacdd5b36fede8d58322e5d79c55"
+ sha256: f00172f5f0b2148ea1c573f52862d50cacb6f353f579f741fa35e51704845958
url: "https://pub.dev"
source: hosted
- version: "2.1.0"
+ version: "2.7.0"
supabase_flutter:
dependency: "direct main"
description:
name: supabase_flutter
- sha256: "2d9683a15098258de137cb9182e695fa2a1a0f366c7409c2a6e6d47bc5a42be3"
+ sha256: d88eccf9e46e57129725a08e72a3109b6f780921fdc27fe3d7669a11ae80906b
url: "https://pub.dev"
source: hosted
- version: "2.5.0"
+ version: "2.9.0"
term_glyph:
dependency: transitive
description:
name: term_glyph
- sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
+ sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
url: "https://pub.dev"
source: hosted
- version: "1.2.1"
+ version: "1.2.2"
test_api:
dependency: transitive
description:
name: test_api
- sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb"
+ sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
url: "https://pub.dev"
source: hosted
- version: "0.7.2"
+ version: "0.7.4"
typed_data:
dependency: transitive
description:
name: typed_data
- sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c
+ sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
url: "https://pub.dev"
source: hosted
- version: "1.3.2"
+ version: "1.4.0"
universal_io:
dependency: "direct main"
description:
@@ -615,42 +622,42 @@ packages:
dependency: transitive
description:
name: url_launcher
- sha256: "0ecc004c62fd3ed36a2ffcbe0dd9700aee63bd7532d0b642a488b1ec310f492e"
+ sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603"
url: "https://pub.dev"
source: hosted
- version: "6.2.5"
+ version: "6.3.1"
url_launcher_android:
dependency: transitive
description:
name: url_launcher_android
- sha256: d4ed0711849dd8e33eb2dd69c25db0d0d3fdc37e0a62e629fe32f57a22db2745
+ sha256: "8582d7f6fe14d2652b4c45c9b6c14c0b678c2af2d083a11b604caeba51930d79"
url: "https://pub.dev"
source: hosted
- version: "6.3.0"
+ version: "6.3.16"
url_launcher_ios:
dependency: transitive
description:
name: url_launcher_ios
- sha256: "9149d493b075ed740901f3ee844a38a00b33116c7c5c10d7fb27df8987fb51d5"
+ sha256: "7f2022359d4c099eea7df3fdf739f7d3d3b9faf3166fb1dd390775176e0b76cb"
url: "https://pub.dev"
source: hosted
- version: "6.2.5"
+ version: "6.3.3"
url_launcher_linux:
dependency: transitive
description:
name: url_launcher_linux
- sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811
+ sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935"
url: "https://pub.dev"
source: hosted
- version: "3.1.1"
+ version: "3.2.1"
url_launcher_macos:
dependency: transitive
description:
name: url_launcher_macos
- sha256: b7244901ea3cf489c5335bdacda07264a6e960b1c1b1a9f91e4bc371d9e68234
+ sha256: "17ba2000b847f334f16626a574c702b196723af2a289e7a93ffcb79acff855c2"
url: "https://pub.dev"
source: hosted
- version: "3.1.0"
+ version: "3.2.2"
url_launcher_platform_interface:
dependency: transitive
description:
@@ -663,26 +670,26 @@ packages:
dependency: transitive
description:
name: url_launcher_web
- sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e"
+ sha256: "4bd2b7b4dc4d4d0b94e5babfffbca8eac1a126c7f3d6ecbc1a11013faa3abba2"
url: "https://pub.dev"
source: hosted
- version: "2.3.3"
+ version: "2.4.1"
url_launcher_windows:
dependency: transitive
description:
name: url_launcher_windows
- sha256: ecf9725510600aa2bb6d7ddabe16357691b6d2805f66216a97d1b881e21beff7
+ sha256: "3284b6d2ac454cf34f114e1d3319866fdd1e19cdc329999057e44ffe936cfa77"
url: "https://pub.dev"
source: hosted
- version: "3.1.1"
+ version: "3.1.4"
uuid:
dependency: transitive
description:
name: uuid
- sha256: "814e9e88f21a176ae1359149021870e87f7cddaf633ab678a5d2b0bff7fd1ba8"
+ sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff
url: "https://pub.dev"
source: hosted
- version: "4.4.0"
+ version: "4.5.1"
vector_math:
dependency: transitive
description:
@@ -695,58 +702,58 @@ packages:
dependency: transitive
description:
name: vm_service
- sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d"
+ sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02
url: "https://pub.dev"
source: hosted
- version: "14.2.5"
+ version: "15.0.0"
web:
dependency: transitive
description:
name: web
- sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb
+ sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
url: "https://pub.dev"
source: hosted
- version: "1.1.0"
- web_socket_channel:
+ version: "1.1.1"
+ web_socket:
dependency: transitive
description:
- name: web_socket_channel
- sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b
+ name: web_socket
+ sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c"
url: "https://pub.dev"
source: hosted
- version: "2.4.0"
- win32:
+ version: "1.0.1"
+ web_socket_channel:
dependency: transitive
description:
- name: win32
- sha256: "0a989dc7ca2bb51eac91e8fd00851297cfffd641aa7538b165c62637ca0eaa4a"
+ name: web_socket_channel
+ sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8
url: "https://pub.dev"
source: hosted
- version: "5.4.0"
+ version: "3.0.3"
xdg_directories:
dependency: transitive
description:
name: xdg_directories
- sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d
+ sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15"
url: "https://pub.dev"
source: hosted
- version: "1.0.4"
+ version: "1.1.0"
yaml:
dependency: transitive
description:
name: yaml
- sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5"
+ sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
url: "https://pub.dev"
source: hosted
- version: "3.1.2"
+ version: "3.1.3"
yet_another_json_isolate:
dependency: transitive
description:
name: yet_another_json_isolate
- sha256: e727502a2640d65b4b8a8a6cb48af9dd0cbe644ba4b3ee667c7f4afa0c1d6069
+ sha256: fe45897501fa156ccefbfb9359c9462ce5dec092f05e8a56109db30be864f01e
url: "https://pub.dev"
source: hosted
- version: "2.0.0"
+ version: "2.1.0"
sdks:
- dart: ">=3.4.0 <4.0.0"
- flutter: ">=3.19.0"
+ dart: ">=3.7.0 <4.0.0"
+ flutter: ">=3.27.0"
diff --git a/demos/supabase-anonymous-auth/pubspec.yaml b/demos/supabase-anonymous-auth/pubspec.yaml
index 2e7b1a14..b4f44bcb 100644
--- a/demos/supabase-anonymous-auth/pubspec.yaml
+++ b/demos/supabase-anonymous-auth/pubspec.yaml
@@ -11,12 +11,12 @@ dependencies:
flutter:
sdk: flutter
- powersync: ^1.9.3
+ powersync: ^1.16.1
path_provider: ^2.1.1
supabase_flutter: ^2.0.2
path: ^1.8.3
logging: ^1.2.0
- sqlite_async: ^0.11.0
+ sqlite_async: ^0.12.0
universal_io: ^2.2.2
dev_dependencies:
diff --git a/demos/supabase-edge-function-auth/.gitignore b/demos/supabase-edge-function-auth/.gitignore
index 0b04140a..777f9a68 100644
--- a/demos/supabase-edge-function-auth/.gitignore
+++ b/demos/supabase-edge-function-auth/.gitignore
@@ -5,9 +5,11 @@
*.swp
.DS_Store
.atom/
+.build/
.buildlog/
.history
.svn/
+.swiftpm/
migrate_working_dir/
# IntelliJ related
diff --git a/demos/supabase-edge-function-auth/ios/Flutter/AppFrameworkInfo.plist b/demos/supabase-edge-function-auth/ios/Flutter/AppFrameworkInfo.plist
index 9625e105..7c569640 100644
--- a/demos/supabase-edge-function-auth/ios/Flutter/AppFrameworkInfo.plist
+++ b/demos/supabase-edge-function-auth/ios/Flutter/AppFrameworkInfo.plist
@@ -21,6 +21,6 @@
CFBundleVersion
1.0
MinimumOSVersion
- 11.0
+ 12.0
diff --git a/demos/supabase-edge-function-auth/ios/Podfile b/demos/supabase-edge-function-auth/ios/Podfile
index bab7dec0..2c1e086a 100644
--- a/demos/supabase-edge-function-auth/ios/Podfile
+++ b/demos/supabase-edge-function-auth/ios/Podfile
@@ -1,5 +1,5 @@
# Uncomment this line to define a global platform for your project
-# platform :ios, '11.0'
+platform :ios, '13.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
@@ -45,4 +45,4 @@ post_install do |installer|
end
end
end
-end
\ No newline at end of file
+end
diff --git a/demos/supabase-edge-function-auth/ios/Podfile.lock b/demos/supabase-edge-function-auth/ios/Podfile.lock
index 73885df0..77f7310a 100644
--- a/demos/supabase-edge-function-auth/ios/Podfile.lock
+++ b/demos/supabase-edge-function-auth/ios/Podfile.lock
@@ -1,28 +1,37 @@
PODS:
- - app_links (0.0.1):
- - Flutter
- - camera_avfoundation (0.0.1):
+ - app_links (0.0.2):
- Flutter
- Flutter (1.0.0)
- path_provider_foundation (0.0.1):
- Flutter
- FlutterMacOS
+ - powersync-sqlite-core (0.4.5)
+ - powersync_flutter_libs (0.0.1):
+ - Flutter
+ - powersync-sqlite-core (~> 0.4.5)
- shared_preferences_foundation (0.0.1):
- Flutter
- FlutterMacOS
- - sqlite3 (3.44.0):
- - sqlite3/common (= 3.44.0)
- - sqlite3/common (3.44.0)
- - sqlite3/fts5 (3.44.0):
+ - sqlite3 (3.49.2):
+ - sqlite3/common (= 3.49.2)
+ - sqlite3/common (3.49.2)
+ - sqlite3/dbstatvtab (3.49.2):
+ - sqlite3/common
+ - sqlite3/fts5 (3.49.2):
- sqlite3/common
- - sqlite3/perf-threadsafe (3.44.0):
+ - sqlite3/math (3.49.2):
- sqlite3/common
- - sqlite3/rtree (3.44.0):
+ - sqlite3/perf-threadsafe (3.49.2):
+ - sqlite3/common
+ - sqlite3/rtree (3.49.2):
- sqlite3/common
- sqlite3_flutter_libs (0.0.1):
- Flutter
- - sqlite3 (~> 3.44.0)
+ - FlutterMacOS
+ - sqlite3 (~> 3.49.1)
+ - sqlite3/dbstatvtab
- sqlite3/fts5
+ - sqlite3/math
- sqlite3/perf-threadsafe
- sqlite3/rtree
- url_launcher_ios (0.0.1):
@@ -30,43 +39,45 @@ PODS:
DEPENDENCIES:
- app_links (from `.symlinks/plugins/app_links/ios`)
- - camera_avfoundation (from `.symlinks/plugins/camera_avfoundation/ios`)
- Flutter (from `Flutter`)
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
+ - powersync_flutter_libs (from `.symlinks/plugins/powersync_flutter_libs/ios`)
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
- - sqlite3_flutter_libs (from `.symlinks/plugins/sqlite3_flutter_libs/ios`)
+ - sqlite3_flutter_libs (from `.symlinks/plugins/sqlite3_flutter_libs/darwin`)
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
SPEC REPOS:
trunk:
+ - powersync-sqlite-core
- sqlite3
EXTERNAL SOURCES:
app_links:
:path: ".symlinks/plugins/app_links/ios"
- camera_avfoundation:
- :path: ".symlinks/plugins/camera_avfoundation/ios"
Flutter:
:path: Flutter
path_provider_foundation:
:path: ".symlinks/plugins/path_provider_foundation/darwin"
+ powersync_flutter_libs:
+ :path: ".symlinks/plugins/powersync_flutter_libs/ios"
shared_preferences_foundation:
:path: ".symlinks/plugins/shared_preferences_foundation/darwin"
sqlite3_flutter_libs:
- :path: ".symlinks/plugins/sqlite3_flutter_libs/ios"
+ :path: ".symlinks/plugins/sqlite3_flutter_libs/darwin"
url_launcher_ios:
:path: ".symlinks/plugins/url_launcher_ios/ios"
SPEC CHECKSUMS:
- app_links: 5ef33d0d295a89d9d16bb81b0e3b0d5f70d6c875
- camera_avfoundation: 3125e8cd1a4387f6f31c6c63abb8a55892a9eeeb
- Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
- path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943
- shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126
- sqlite3: 6e2d4a4879854d0ec86b476bf3c3e30870bac273
- sqlite3_flutter_libs: eb769059df0356dc52ddda040f09cacc9391a7cf
- url_launcher_ios: bf5ce03e0e2088bad9cc378ea97fa0ed5b49673b
+ app_links: 76b66b60cc809390ca1ad69bfd66b998d2387ac7
+ Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467
+ path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
+ powersync-sqlite-core: 6f32860379009d2a37cadc9e9427a431bdbd83c8
+ powersync_flutter_libs: 7684a62208907328906eb932f1fc8b3d8879974e
+ shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
+ sqlite3: 3c950dc86011117c307eb0b28c4a7bb449dce9f1
+ sqlite3_flutter_libs: f6acaa2172e6bb3e2e70c771661905080e8ebcf2
+ url_launcher_ios: 694010445543906933d732453a59da0a173ae33d
-PODFILE CHECKSUM: adb9c9fb405cdaf8ac7cbd45ad6db78acaa58c33
+PODFILE CHECKSUM: 2c1730c97ea13f1ea48b32e9c79de785b4f2f02f
-COCOAPODS: 1.14.3
+COCOAPODS: 1.16.2
diff --git a/demos/supabase-edge-function-auth/ios/Runner.xcodeproj/project.pbxproj b/demos/supabase-edge-function-auth/ios/Runner.xcodeproj/project.pbxproj
index 6a93f233..16636b7a 100644
--- a/demos/supabase-edge-function-auth/ios/Runner.xcodeproj/project.pbxproj
+++ b/demos/supabase-edge-function-auth/ios/Runner.xcodeproj/project.pbxproj
@@ -155,7 +155,7 @@
97C146E61CF9000F007C117D /* Project object */ = {
isa = PBXProject;
attributes = {
- LastUpgradeCheck = 1430;
+ LastUpgradeCheck = 1510;
ORGANIZATIONNAME = "";
TargetAttributes = {
97C146ED1CF9000F007C117D = {
@@ -342,7 +342,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
@@ -419,7 +419,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
@@ -468,7 +468,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
diff --git a/demos/supabase-edge-function-auth/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/demos/supabase-edge-function-auth/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
index a6b826db..c53e2b31 100644
--- a/demos/supabase-edge-function-auth/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
+++ b/demos/supabase-edge-function-auth/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -1,6 +1,6 @@
diff --git a/demos/supabase-edge-function-auth/ios/Runner/AppDelegate.swift b/demos/supabase-edge-function-auth/ios/Runner/AppDelegate.swift
index 70693e4a..b6363034 100644
--- a/demos/supabase-edge-function-auth/ios/Runner/AppDelegate.swift
+++ b/demos/supabase-edge-function-auth/ios/Runner/AppDelegate.swift
@@ -1,7 +1,7 @@
import UIKit
import Flutter
-@UIApplicationMain
+@main
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
diff --git a/demos/supabase-edge-function-auth/macos/Podfile b/demos/supabase-edge-function-auth/macos/Podfile
index c795730d..b52666a1 100644
--- a/demos/supabase-edge-function-auth/macos/Podfile
+++ b/demos/supabase-edge-function-auth/macos/Podfile
@@ -1,4 +1,4 @@
-platform :osx, '10.14'
+platform :osx, '10.15'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
diff --git a/demos/supabase-edge-function-auth/macos/Podfile.lock b/demos/supabase-edge-function-auth/macos/Podfile.lock
index f54327c0..6983b2da 100644
--- a/demos/supabase-edge-function-auth/macos/Podfile.lock
+++ b/demos/supabase-edge-function-auth/macos/Podfile.lock
@@ -5,24 +5,33 @@ PODS:
- path_provider_foundation (0.0.1):
- Flutter
- FlutterMacOS
+ - powersync-sqlite-core (0.4.5)
+ - powersync_flutter_libs (0.0.1):
+ - FlutterMacOS
+ - powersync-sqlite-core (~> 0.4.5)
- shared_preferences_foundation (0.0.1):
- Flutter
- FlutterMacOS
- - sign_in_with_apple (0.0.1):
- - FlutterMacOS
- - sqlite3 (3.43.1):
- - sqlite3/common (= 3.43.1)
- - sqlite3/common (3.43.1)
- - sqlite3/fts5 (3.43.1):
+ - sqlite3 (3.49.2):
+ - sqlite3/common (= 3.49.2)
+ - sqlite3/common (3.49.2)
+ - sqlite3/dbstatvtab (3.49.2):
+ - sqlite3/common
+ - sqlite3/fts5 (3.49.2):
- sqlite3/common
- - sqlite3/perf-threadsafe (3.43.1):
+ - sqlite3/math (3.49.2):
- sqlite3/common
- - sqlite3/rtree (3.43.1):
+ - sqlite3/perf-threadsafe (3.49.2):
+ - sqlite3/common
+ - sqlite3/rtree (3.49.2):
- sqlite3/common
- sqlite3_flutter_libs (0.0.1):
+ - Flutter
- FlutterMacOS
- - sqlite3 (~> 3.43.1)
+ - sqlite3 (~> 3.49.1)
+ - sqlite3/dbstatvtab
- sqlite3/fts5
+ - sqlite3/math
- sqlite3/perf-threadsafe
- sqlite3/rtree
- url_launcher_macos (0.0.1):
@@ -32,13 +41,14 @@ DEPENDENCIES:
- app_links (from `Flutter/ephemeral/.symlinks/plugins/app_links/macos`)
- FlutterMacOS (from `Flutter/ephemeral`)
- path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`)
+ - powersync_flutter_libs (from `Flutter/ephemeral/.symlinks/plugins/powersync_flutter_libs/macos`)
- shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`)
- - sign_in_with_apple (from `Flutter/ephemeral/.symlinks/plugins/sign_in_with_apple/macos`)
- - sqlite3_flutter_libs (from `Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/macos`)
+ - sqlite3_flutter_libs (from `Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/darwin`)
- url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`)
SPEC REPOS:
trunk:
+ - powersync-sqlite-core
- sqlite3
EXTERNAL SOURCES:
@@ -48,25 +58,26 @@ EXTERNAL SOURCES:
:path: Flutter/ephemeral
path_provider_foundation:
:path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin
+ powersync_flutter_libs:
+ :path: Flutter/ephemeral/.symlinks/plugins/powersync_flutter_libs/macos
shared_preferences_foundation:
:path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin
- sign_in_with_apple:
- :path: Flutter/ephemeral/.symlinks/plugins/sign_in_with_apple/macos
sqlite3_flutter_libs:
- :path: Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/macos
+ :path: Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/darwin
url_launcher_macos:
:path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos
SPEC CHECKSUMS:
- app_links: 4481ed4d71f384b0c3ae5016f4633aa73d32ff67
- FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
- path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943
- shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126
- sign_in_with_apple: a9e97e744e8edc36aefc2723111f652102a7a727
- sqlite3: e0a0623a33a20a47cb5921552aebc6e9e437dc91
- sqlite3_flutter_libs: a91655e4a75a499364f693041aa1c6d1b36b66d0
- url_launcher_macos: d2691c7dd33ed713bf3544850a623080ec693d95
+ app_links: afe860c55c7ef176cea7fb630a2b7d7736de591d
+ FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1
+ path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
+ powersync-sqlite-core: 6f32860379009d2a37cadc9e9427a431bdbd83c8
+ powersync_flutter_libs: 41d8a7b193abf15e46f95f0ec1229d86b6893171
+ shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
+ sqlite3: 3c950dc86011117c307eb0b28c4a7bb449dce9f1
+ sqlite3_flutter_libs: f6acaa2172e6bb3e2e70c771661905080e8ebcf2
+ url_launcher_macos: 0fba8ddabfc33ce0a9afe7c5fef5aab3d8d2d673
-PODFILE CHECKSUM: 236401fc2c932af29a9fcf0e97baeeb2d750d367
+PODFILE CHECKSUM: 9ebaf0ce3d369aaa26a9ea0e159195ed94724cf3
-COCOAPODS: 1.12.1
+COCOAPODS: 1.16.2
diff --git a/demos/supabase-edge-function-auth/pubspec.lock b/demos/supabase-edge-function-auth/pubspec.lock
index 08973ab4..48c25b82 100644
--- a/demos/supabase-edge-function-auth/pubspec.lock
+++ b/demos/supabase-edge-function-auth/pubspec.lock
@@ -5,10 +5,10 @@ packages:
dependency: transitive
description:
name: app_links
- sha256: f04c3ca96426baba784c736a201926bd4145524c36a1b38942a351b033305e21
+ sha256: "85ed8fc1d25a76475914fff28cc994653bd900bc2c26e4b57a49e097febb54ba"
url: "https://pub.dev"
source: hosted
- version: "6.2.1"
+ version: "6.4.0"
app_links_linux:
dependency: transitive
description:
@@ -37,34 +37,34 @@ packages:
dependency: transitive
description:
name: args
- sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a"
+ sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
url: "https://pub.dev"
source: hosted
- version: "2.5.0"
+ version: "2.7.0"
async:
dependency: transitive
description:
name: async
- sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
+ sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb"
url: "https://pub.dev"
source: hosted
- version: "2.11.0"
+ version: "2.13.0"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
- sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
+ sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
url: "https://pub.dev"
source: hosted
- version: "2.1.1"
+ version: "2.1.2"
characters:
dependency: transitive
description:
name: characters
- sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
+ sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
url: "https://pub.dev"
source: hosted
- version: "1.3.0"
+ version: "1.4.0"
checked_yaml:
dependency: transitive
description:
@@ -77,74 +77,58 @@ packages:
dependency: transitive
description:
name: clock
- sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
+ sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
url: "https://pub.dev"
source: hosted
- version: "1.1.1"
+ version: "1.1.2"
collection:
dependency: transitive
description:
name: collection
- sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
+ sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
url: "https://pub.dev"
source: hosted
- version: "1.18.0"
+ version: "1.19.1"
crypto:
dependency: transitive
description:
name: crypto
- sha256: ec30d999af904f33454ba22ed9a86162b35e52b44ac4807d1d93c288041d7d27
+ sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855"
url: "https://pub.dev"
source: hosted
- version: "3.0.5"
+ version: "3.0.6"
fake_async:
dependency: transitive
description:
name: fake_async
- sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
- url: "https://pub.dev"
- source: hosted
- version: "1.3.1"
- fetch_api:
- dependency: transitive
- description:
- name: fetch_api
- sha256: "97f46c25b480aad74f7cc2ad7ccba2c5c6f08d008e68f95c1077286ce243d0e6"
+ sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
url: "https://pub.dev"
source: hosted
- version: "2.2.0"
- fetch_client:
- dependency: transitive
- description:
- name: fetch_client
- sha256: "9666ee14536778474072245ed5cba07db81ae8eb5de3b7bf4a2d1e2c49696092"
- url: "https://pub.dev"
- source: hosted
- version: "1.1.2"
+ version: "1.3.3"
ffi:
dependency: transitive
description:
name: ffi
- sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6"
+ sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418"
url: "https://pub.dev"
source: hosted
- version: "2.1.3"
+ version: "2.1.4"
file:
dependency: transitive
description:
name: file
- sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c"
+ sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4
url: "https://pub.dev"
source: hosted
- version: "7.0.0"
+ version: "7.0.1"
fixnum:
dependency: transitive
description:
name: fixnum
- sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1"
+ sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be
url: "https://pub.dev"
source: hosted
- version: "1.1.0"
+ version: "1.1.1"
flutter:
dependency: "direct main"
description: flutter
@@ -172,18 +156,18 @@ packages:
dependency: transitive
description:
name: functions_client
- sha256: e63f49cd3b41727f47b3bde284a11a4ac62839e0604f64077d4257487510e484
+ sha256: b410e4d609522357396cd84bb9a8f6e3a4561b5f7d3ce82267f6f1c2af42f16b
url: "https://pub.dev"
source: hosted
- version: "2.3.2"
+ version: "2.4.2"
gotrue:
dependency: transitive
description:
name: gotrue
- sha256: "8703db795511f69194fe77125a0c838bbb6befc2f95717b6e40331784a8bdecb"
+ sha256: "04a6efacffd42773ed96dc752f19bb20a1fbc383e81ba82659072b775cf62912"
url: "https://pub.dev"
source: hosted
- version: "2.8.4"
+ version: "2.12.0"
gtk:
dependency: transitive
description:
@@ -196,26 +180,18 @@ packages:
dependency: transitive
description:
name: http
- sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010
+ sha256: "2c11f3f94c687ee9bad77c171151672986360b2b001d109814ee7140b2cf261b"
url: "https://pub.dev"
source: hosted
- version: "1.2.2"
+ version: "1.4.0"
http_parser:
dependency: transitive
description:
name: http_parser
- sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b"
- url: "https://pub.dev"
- source: hosted
- version: "4.0.2"
- js:
- dependency: transitive
- description:
- name: js
- sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf
+ sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
url: "https://pub.dev"
source: hosted
- version: "0.7.1"
+ version: "4.1.2"
json_annotation:
dependency: transitive
description:
@@ -236,18 +212,18 @@ packages:
dependency: transitive
description:
name: leak_tracker
- sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05"
+ sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0"
url: "https://pub.dev"
source: hosted
- version: "10.0.5"
+ version: "10.0.9"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
- sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806"
+ sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
url: "https://pub.dev"
source: hosted
- version: "3.0.5"
+ version: "3.0.9"
leak_tracker_testing:
dependency: transitive
description:
@@ -268,18 +244,18 @@ packages:
dependency: "direct main"
description:
name: logging
- sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340"
+ sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
url: "https://pub.dev"
source: hosted
- version: "1.2.0"
+ version: "1.3.0"
matcher:
dependency: transitive
description:
name: matcher
- sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
+ sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
url: "https://pub.dev"
source: hosted
- version: "0.12.16+1"
+ version: "0.12.17"
material_color_utilities:
dependency: transitive
description:
@@ -292,18 +268,18 @@ packages:
dependency: transitive
description:
name: meta
- sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
+ sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
url: "https://pub.dev"
source: hosted
- version: "1.15.0"
+ version: "1.16.0"
mime:
dependency: transitive
description:
name: mime
- sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2"
+ sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6"
url: "https://pub.dev"
source: hosted
- version: "1.0.5"
+ version: "2.0.0"
mutex:
dependency: transitive
description:
@@ -316,34 +292,34 @@ packages:
dependency: "direct main"
description:
name: path
- sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
+ sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
url: "https://pub.dev"
source: hosted
- version: "1.9.0"
+ version: "1.9.1"
path_provider:
dependency: "direct main"
description:
name: path_provider
- sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378
+ sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd"
url: "https://pub.dev"
source: hosted
- version: "2.1.4"
+ version: "2.1.5"
path_provider_android:
dependency: transitive
description:
name: path_provider_android
- sha256: "6f01f8e37ec30b07bc424b4deabac37cacb1bc7e2e515ad74486039918a37eb7"
+ sha256: d0d310befe2c8ab9e7f393288ccbb11b60c019c6b5afc21973eeee4dda2b35e9
url: "https://pub.dev"
source: hosted
- version: "2.2.10"
+ version: "2.2.17"
path_provider_foundation:
dependency: transitive
description:
name: path_provider_foundation
- sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16
+ sha256: "4843174df4d288f5e29185bd6e72a6fbdf5a4a4602717eed565497429f179942"
url: "https://pub.dev"
source: hosted
- version: "2.4.0"
+ version: "2.4.1"
path_provider_linux:
dependency: transitive
description:
@@ -372,10 +348,10 @@ packages:
dependency: transitive
description:
name: platform
- sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65"
+ sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984"
url: "https://pub.dev"
source: hosted
- version: "3.1.5"
+ version: "3.1.6"
plugin_platform_interface:
dependency: transitive
description:
@@ -388,48 +364,55 @@ packages:
dependency: transitive
description:
name: postgrest
- sha256: c4197238601c7c3103b03a4bb77f2050b17d0064bf8b968309421abdebbb7f0e
+ sha256: "10b81a23b1c829ccadf68c626b4d66666453a1474d24c563f313f5ca7851d575"
url: "https://pub.dev"
source: hosted
- version: "2.1.4"
+ version: "2.4.2"
powersync:
dependency: "direct main"
description:
path: "../../packages/powersync"
relative: true
source: path
- version: "1.9.2"
+ version: "1.15.0"
+ powersync_core:
+ dependency: "direct overridden"
+ description:
+ path: "../../packages/powersync_core"
+ relative: true
+ source: path
+ version: "1.5.0"
powersync_flutter_libs:
dependency: "direct overridden"
description:
path: "../../packages/powersync_flutter_libs"
relative: true
source: path
- version: "0.4.2"
+ version: "0.4.10"
pub_semver:
dependency: transitive
description:
name: pub_semver
- sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c"
+ sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585"
url: "https://pub.dev"
source: hosted
- version: "2.1.4"
+ version: "2.2.0"
pubspec_parse:
dependency: transitive
description:
name: pubspec_parse
- sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8
+ sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082"
url: "https://pub.dev"
source: hosted
- version: "1.3.0"
+ version: "1.5.0"
realtime_client:
dependency: transitive
description:
name: realtime_client
- sha256: d897a65ee3b1b5ddc1cf606f0b83792262d38fd5679c2df7e38da29c977513da
+ sha256: "3a0a99b5bd0fc3b35e8ee846d9a22fa2c2117f7ef1cb73d1e5f08f6c3d09c4e9"
url: "https://pub.dev"
source: hosted
- version: "2.2.1"
+ version: "2.5.0"
retry:
dependency: transitive
description:
@@ -450,26 +433,26 @@ packages:
dependency: transitive
description:
name: shared_preferences
- sha256: "746e5369a43170c25816cc472ee016d3a66bc13fcf430c0bc41ad7b4b2922051"
+ sha256: "6e8bf70b7fef813df4e9a36f658ac46d107db4b4cfe1048b477d4e453a8159f5"
url: "https://pub.dev"
source: hosted
- version: "2.3.2"
+ version: "2.5.3"
shared_preferences_android:
dependency: transitive
description:
name: shared_preferences_android
- sha256: a7e8467e9181cef109f601e3f65765685786c1a738a83d7fbbde377589c0d974
+ sha256: "20cbd561f743a342c76c151d6ddb93a9ce6005751e7aa458baad3858bfbfb6ac"
url: "https://pub.dev"
source: hosted
- version: "2.3.1"
+ version: "2.4.10"
shared_preferences_foundation:
dependency: transitive
description:
name: shared_preferences_foundation
- sha256: c4b35f6cb8f63c147312c054ce7c2254c8066745125264f0c88739c417fc9d9f
+ sha256: "6a52cfcdaeac77cad8c97b539ff688ccfc458c007b4db12be584fbe5c0e49e03"
url: "https://pub.dev"
source: hosted
- version: "2.5.2"
+ version: "2.5.4"
shared_preferences_linux:
dependency: transitive
description:
@@ -490,10 +473,10 @@ packages:
dependency: transitive
description:
name: shared_preferences_web
- sha256: d2ca4132d3946fec2184261726b355836a82c33d7d5b67af32692aff18a4684e
+ sha256: c49bd060261c9a3f0ff445892695d6212ff603ef3115edbb448509d407600019
url: "https://pub.dev"
source: hosted
- version: "2.4.2"
+ version: "2.4.3"
shared_preferences_windows:
dependency: transitive
description:
@@ -506,15 +489,15 @@ packages:
dependency: transitive
description: flutter
source: sdk
- version: "0.0.99"
+ version: "0.0.0"
source_span:
dependency: transitive
description:
name: source_span
- sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
+ sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
url: "https://pub.dev"
source: hosted
- version: "1.10.0"
+ version: "1.10.1"
sprintf:
dependency: transitive
description:
@@ -527,106 +510,106 @@ packages:
dependency: transitive
description:
name: sqlite3
- sha256: bb174b3ec2527f9c5f680f73a89af8149dd99782fbb56ea88ad0807c5638f2ed
+ sha256: "310af39c40dd0bb2058538333c9d9840a2725ae0b9f77e4fd09ad6696aa8f66e"
url: "https://pub.dev"
source: hosted
- version: "2.4.7"
+ version: "2.7.5"
sqlite3_flutter_libs:
dependency: transitive
description:
name: sqlite3_flutter_libs
- sha256: "62bbb4073edbcdf53f40c80775f33eea01d301b7b81417e5b3fb7395416258c1"
+ sha256: "1a96b59227828d9eb1463191d684b37a27d66ee5ed7597fcf42eee6452c88a14"
url: "https://pub.dev"
source: hosted
- version: "0.5.24"
+ version: "0.5.32"
sqlite3_web:
dependency: transitive
description:
name: sqlite3_web
- sha256: f22d1dda7a40be0867984f55cdf5c2d599e5f05d3be4a642d78f38b38983f554
+ sha256: "967e076442f7e1233bd7241ca61f3efe4c7fc168dac0f38411bdb3bdf471eb3c"
url: "https://pub.dev"
source: hosted
- version: "0.2.0"
+ version: "0.3.1"
sqlite_async:
dependency: "direct main"
description:
name: sqlite_async
- sha256: d66fb6e6d07c1a834743326c033029f75becbb1fad6823d709f921872abc3d5b
+ sha256: a60e8d5c8df8e694933bd5a312c38393e79ad77d784bb91c6f38ba627bfb7aec
url: "https://pub.dev"
source: hosted
- version: "0.11.0"
+ version: "0.11.4"
stack_trace:
dependency: transitive
description:
name: stack_trace
- sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
+ sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
url: "https://pub.dev"
source: hosted
- version: "1.11.1"
+ version: "1.12.1"
storage_client:
dependency: transitive
description:
name: storage_client
- sha256: "28c147c805304dbc2b762becd1fc26ee0cb621ace3732b9ae61ef979aab8b367"
+ sha256: "09bac4d75eea58e8113ca928e6655a09cc8059e6d1b472ee801f01fde815bcfc"
url: "https://pub.dev"
source: hosted
- version: "2.0.3"
+ version: "2.4.0"
stream_channel:
dependency: transitive
description:
name: stream_channel
- sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
+ sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
url: "https://pub.dev"
source: hosted
- version: "2.1.2"
+ version: "2.1.4"
string_scanner:
dependency: transitive
description:
name: string_scanner
- sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
+ sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
url: "https://pub.dev"
source: hosted
- version: "1.2.0"
+ version: "1.4.1"
supabase:
dependency: transitive
description:
name: supabase
- sha256: "4ed1cf3298f39865c05b2d8557f92eb131a9b9af70e32e218672a0afce01a6bc"
+ sha256: f00172f5f0b2148ea1c573f52862d50cacb6f353f579f741fa35e51704845958
url: "https://pub.dev"
source: hosted
- version: "2.3.0"
+ version: "2.7.0"
supabase_flutter:
dependency: "direct main"
description:
name: supabase_flutter
- sha256: ff6ba3048fd47d831fdc0027d3efb99346d99b95becfcb406562454bd9b229c5
+ sha256: d88eccf9e46e57129725a08e72a3109b6f780921fdc27fe3d7669a11ae80906b
url: "https://pub.dev"
source: hosted
- version: "2.6.0"
+ version: "2.9.0"
term_glyph:
dependency: transitive
description:
name: term_glyph
- sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
+ sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
url: "https://pub.dev"
source: hosted
- version: "1.2.1"
+ version: "1.2.2"
test_api:
dependency: transitive
description:
name: test_api
- sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb"
+ sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
url: "https://pub.dev"
source: hosted
- version: "0.7.2"
+ version: "0.7.4"
typed_data:
dependency: transitive
description:
name: typed_data
- sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c
+ sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
url: "https://pub.dev"
source: hosted
- version: "1.3.2"
+ version: "1.4.0"
universal_io:
dependency: "direct main"
description:
@@ -639,42 +622,42 @@ packages:
dependency: transitive
description:
name: url_launcher
- sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3"
+ sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603"
url: "https://pub.dev"
source: hosted
- version: "6.3.0"
+ version: "6.3.1"
url_launcher_android:
dependency: transitive
description:
name: url_launcher_android
- sha256: f0c73347dfcfa5b3db8bc06e1502668265d39c08f310c29bff4e28eea9699f79
+ sha256: "8582d7f6fe14d2652b4c45c9b6c14c0b678c2af2d083a11b604caeba51930d79"
url: "https://pub.dev"
source: hosted
- version: "6.3.9"
+ version: "6.3.16"
url_launcher_ios:
dependency: transitive
description:
name: url_launcher_ios
- sha256: e43b677296fadce447e987a2f519dcf5f6d1e527dc35d01ffab4fff5b8a7063e
+ sha256: "7f2022359d4c099eea7df3fdf739f7d3d3b9faf3166fb1dd390775176e0b76cb"
url: "https://pub.dev"
source: hosted
- version: "6.3.1"
+ version: "6.3.3"
url_launcher_linux:
dependency: transitive
description:
name: url_launcher_linux
- sha256: e2b9622b4007f97f504cd64c0128309dfb978ae66adbe944125ed9e1750f06af
+ sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935"
url: "https://pub.dev"
source: hosted
- version: "3.2.0"
+ version: "3.2.1"
url_launcher_macos:
dependency: transitive
description:
name: url_launcher_macos
- sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de"
+ sha256: "17ba2000b847f334f16626a574c702b196723af2a289e7a93ffcb79acff855c2"
url: "https://pub.dev"
source: hosted
- version: "3.2.0"
+ version: "3.2.2"
url_launcher_platform_interface:
dependency: transitive
description:
@@ -687,26 +670,26 @@ packages:
dependency: transitive
description:
name: url_launcher_web
- sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e"
+ sha256: "4bd2b7b4dc4d4d0b94e5babfffbca8eac1a126c7f3d6ecbc1a11013faa3abba2"
url: "https://pub.dev"
source: hosted
- version: "2.3.3"
+ version: "2.4.1"
url_launcher_windows:
dependency: transitive
description:
name: url_launcher_windows
- sha256: "49c10f879746271804767cb45551ec5592cdab00ee105c06dddde1a98f73b185"
+ sha256: "3284b6d2ac454cf34f114e1d3319866fdd1e19cdc329999057e44ffe936cfa77"
url: "https://pub.dev"
source: hosted
- version: "3.1.2"
+ version: "3.1.4"
uuid:
dependency: transitive
description:
name: uuid
- sha256: "83d37c7ad7aaf9aa8e275490669535c8080377cfa7a7004c24dfac53afffaa90"
+ sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff
url: "https://pub.dev"
source: hosted
- version: "4.4.2"
+ version: "4.5.1"
vector_math:
dependency: transitive
description:
@@ -719,58 +702,58 @@ packages:
dependency: transitive
description:
name: vm_service
- sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d"
+ sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02
url: "https://pub.dev"
source: hosted
- version: "14.2.5"
+ version: "15.0.0"
web:
dependency: transitive
description:
name: web
- sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb
+ sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
url: "https://pub.dev"
source: hosted
- version: "1.1.0"
+ version: "1.1.1"
web_socket:
dependency: transitive
description:
name: web_socket
- sha256: "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83"
+ sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c"
url: "https://pub.dev"
source: hosted
- version: "0.1.6"
+ version: "1.0.1"
web_socket_channel:
dependency: transitive
description:
name: web_socket_channel
- sha256: "9f187088ed104edd8662ca07af4b124465893caf063ba29758f97af57e61da8f"
+ sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8
url: "https://pub.dev"
source: hosted
- version: "3.0.1"
+ version: "3.0.3"
xdg_directories:
dependency: transitive
description:
name: xdg_directories
- sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d
+ sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15"
url: "https://pub.dev"
source: hosted
- version: "1.0.4"
+ version: "1.1.0"
yaml:
dependency: transitive
description:
name: yaml
- sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5"
+ sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
url: "https://pub.dev"
source: hosted
- version: "3.1.2"
+ version: "3.1.3"
yet_another_json_isolate:
dependency: transitive
description:
name: yet_another_json_isolate
- sha256: "47ed3900e6b0e4dfe378811a4402e85b7fc126a7daa94f840fef65ea9c8e46f4"
+ sha256: fe45897501fa156ccefbfb9359c9462ce5dec092f05e8a56109db30be864f01e
url: "https://pub.dev"
source: hosted
- version: "2.0.2"
+ version: "2.1.0"
sdks:
- dart: ">=3.4.0 <4.0.0"
- flutter: ">=3.22.0"
+ dart: ">=3.7.0 <4.0.0"
+ flutter: ">=3.27.0"
diff --git a/demos/supabase-edge-function-auth/pubspec.yaml b/demos/supabase-edge-function-auth/pubspec.yaml
index 9a576368..f1f5ddcb 100644
--- a/demos/supabase-edge-function-auth/pubspec.yaml
+++ b/demos/supabase-edge-function-auth/pubspec.yaml
@@ -11,12 +11,12 @@ dependencies:
flutter:
sdk: flutter
- powersync: ^1.9.3
+ powersync: ^1.16.1
path_provider: ^2.1.1
supabase_flutter: ^2.0.2
path: ^1.8.3
logging: ^1.2.0
- sqlite_async: ^0.11.0
+ sqlite_async: ^0.12.0
universal_io: ^2.2.2
dev_dependencies:
diff --git a/demos/supabase-simple-chat/ios/Flutter/AppFrameworkInfo.plist b/demos/supabase-simple-chat/ios/Flutter/AppFrameworkInfo.plist
index 9625e105..7c569640 100644
--- a/demos/supabase-simple-chat/ios/Flutter/AppFrameworkInfo.plist
+++ b/demos/supabase-simple-chat/ios/Flutter/AppFrameworkInfo.plist
@@ -21,6 +21,6 @@
CFBundleVersion
1.0
MinimumOSVersion
- 11.0
+ 12.0
diff --git a/demos/supabase-simple-chat/ios/Podfile b/demos/supabase-simple-chat/ios/Podfile
index 164df534..3e44f9c6 100644
--- a/demos/supabase-simple-chat/ios/Podfile
+++ b/demos/supabase-simple-chat/ios/Podfile
@@ -1,5 +1,5 @@
# Uncomment this line to define a global platform for your project
-platform :ios, '12.0'
+platform :ios, '13.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
diff --git a/demos/supabase-simple-chat/ios/Podfile.lock b/demos/supabase-simple-chat/ios/Podfile.lock
index 6dbc5f5f..6108d2f1 100644
--- a/demos/supabase-simple-chat/ios/Podfile.lock
+++ b/demos/supabase-simple-chat/ios/Podfile.lock
@@ -1,47 +1,54 @@
PODS:
- - app_links (0.0.1):
+ - app_links (0.0.2):
- Flutter
- Flutter (1.0.0)
- path_provider_foundation (0.0.1):
- Flutter
- FlutterMacOS
+ - powersync-sqlite-core (0.4.5)
+ - powersync_flutter_libs (0.0.1):
+ - Flutter
+ - powersync-sqlite-core (~> 0.4.5)
- shared_preferences_foundation (0.0.1):
- Flutter
- FlutterMacOS
- - sign_in_with_apple (0.0.1):
- - Flutter
- - sqlite3 (3.45.1):
- - sqlite3/common (= 3.45.1)
- - sqlite3/common (3.45.1)
- - sqlite3/fts5 (3.45.1):
+ - sqlite3 (3.49.2):
+ - sqlite3/common (= 3.49.2)
+ - sqlite3/common (3.49.2)
+ - sqlite3/dbstatvtab (3.49.2):
+ - sqlite3/common
+ - sqlite3/fts5 (3.49.2):
- sqlite3/common
- - sqlite3/perf-threadsafe (3.45.1):
+ - sqlite3/math (3.49.2):
- sqlite3/common
- - sqlite3/rtree (3.45.1):
+ - sqlite3/perf-threadsafe (3.49.2):
+ - sqlite3/common
+ - sqlite3/rtree (3.49.2):
- sqlite3/common
- sqlite3_flutter_libs (0.0.1):
- Flutter
- - sqlite3 (~> 3.45.1)
+ - FlutterMacOS
+ - sqlite3 (~> 3.49.1)
+ - sqlite3/dbstatvtab
- sqlite3/fts5
+ - sqlite3/math
- sqlite3/perf-threadsafe
- sqlite3/rtree
- url_launcher_ios (0.0.1):
- Flutter
- - webview_flutter_wkwebview (0.0.1):
- - Flutter
DEPENDENCIES:
- app_links (from `.symlinks/plugins/app_links/ios`)
- Flutter (from `Flutter`)
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
+ - powersync_flutter_libs (from `.symlinks/plugins/powersync_flutter_libs/ios`)
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
- - sign_in_with_apple (from `.symlinks/plugins/sign_in_with_apple/ios`)
- - sqlite3_flutter_libs (from `.symlinks/plugins/sqlite3_flutter_libs/ios`)
+ - sqlite3_flutter_libs (from `.symlinks/plugins/sqlite3_flutter_libs/darwin`)
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
- - webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/ios`)
SPEC REPOS:
trunk:
+ - powersync-sqlite-core
- sqlite3
EXTERNAL SOURCES:
@@ -51,28 +58,26 @@ EXTERNAL SOURCES:
:path: Flutter
path_provider_foundation:
:path: ".symlinks/plugins/path_provider_foundation/darwin"
+ powersync_flutter_libs:
+ :path: ".symlinks/plugins/powersync_flutter_libs/ios"
shared_preferences_foundation:
:path: ".symlinks/plugins/shared_preferences_foundation/darwin"
- sign_in_with_apple:
- :path: ".symlinks/plugins/sign_in_with_apple/ios"
sqlite3_flutter_libs:
- :path: ".symlinks/plugins/sqlite3_flutter_libs/ios"
+ :path: ".symlinks/plugins/sqlite3_flutter_libs/darwin"
url_launcher_ios:
:path: ".symlinks/plugins/url_launcher_ios/ios"
- webview_flutter_wkwebview:
- :path: ".symlinks/plugins/webview_flutter_wkwebview/ios"
SPEC CHECKSUMS:
- app_links: 5ef33d0d295a89d9d16bb81b0e3b0d5f70d6c875
- Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
- path_provider_foundation: 3784922295ac71e43754bd15e0653ccfd36a147c
- shared_preferences_foundation: b4c3b4cddf1c21f02770737f147a3f5da9d39695
- sign_in_with_apple: f3bf75217ea4c2c8b91823f225d70230119b8440
- sqlite3: 73b7fc691fdc43277614250e04d183740cb15078
- sqlite3_flutter_libs: af0e8fe9bce48abddd1ffdbbf839db0302d72d80
- url_launcher_ios: bbd758c6e7f9fd7b5b1d4cde34d2b95fcce5e812
- webview_flutter_wkwebview: be0f0d33777f1bfd0c9fdcb594786704dbf65f36
+ app_links: 76b66b60cc809390ca1ad69bfd66b998d2387ac7
+ Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467
+ path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
+ powersync-sqlite-core: 6f32860379009d2a37cadc9e9427a431bdbd83c8
+ powersync_flutter_libs: 7684a62208907328906eb932f1fc8b3d8879974e
+ shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
+ sqlite3: 3c950dc86011117c307eb0b28c4a7bb449dce9f1
+ sqlite3_flutter_libs: f6acaa2172e6bb3e2e70c771661905080e8ebcf2
+ url_launcher_ios: 694010445543906933d732453a59da0a173ae33d
-PODFILE CHECKSUM: 7be2f5f74864d463a8ad433546ed1de7e0f29aef
+PODFILE CHECKSUM: a57f30d18f102dd3ce366b1d62a55ecbef2158e5
-COCOAPODS: 1.15.2
+COCOAPODS: 1.16.2
diff --git a/demos/supabase-simple-chat/ios/Runner.xcodeproj/project.pbxproj b/demos/supabase-simple-chat/ios/Runner.xcodeproj/project.pbxproj
index 7232e3ea..68a37668 100644
--- a/demos/supabase-simple-chat/ios/Runner.xcodeproj/project.pbxproj
+++ b/demos/supabase-simple-chat/ios/Runner.xcodeproj/project.pbxproj
@@ -216,7 +216,7 @@
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = YES;
- LastUpgradeCheck = 1430;
+ LastUpgradeCheck = 1510;
ORGANIZATIONNAME = "";
TargetAttributes = {
331C8080294A63A400263BE5 = {
@@ -453,7 +453,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
@@ -580,7 +580,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
@@ -629,7 +629,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
diff --git a/demos/supabase-simple-chat/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/demos/supabase-simple-chat/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
index 87131a09..15cada48 100644
--- a/demos/supabase-simple-chat/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
+++ b/demos/supabase-simple-chat/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -1,6 +1,6 @@
diff --git a/demos/supabase-simple-chat/ios/Runner/AppDelegate.swift b/demos/supabase-simple-chat/ios/Runner/AppDelegate.swift
index 70693e4a..b6363034 100644
--- a/demos/supabase-simple-chat/ios/Runner/AppDelegate.swift
+++ b/demos/supabase-simple-chat/ios/Runner/AppDelegate.swift
@@ -1,7 +1,7 @@
import UIKit
import Flutter
-@UIApplicationMain
+@main
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
diff --git a/demos/supabase-simple-chat/macos/Podfile b/demos/supabase-simple-chat/macos/Podfile
index c795730d..b52666a1 100644
--- a/demos/supabase-simple-chat/macos/Podfile
+++ b/demos/supabase-simple-chat/macos/Podfile
@@ -1,4 +1,4 @@
-platform :osx, '10.14'
+platform :osx, '10.15'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
diff --git a/demos/supabase-simple-chat/macos/Podfile.lock b/demos/supabase-simple-chat/macos/Podfile.lock
new file mode 100644
index 00000000..6983b2da
--- /dev/null
+++ b/demos/supabase-simple-chat/macos/Podfile.lock
@@ -0,0 +1,83 @@
+PODS:
+ - app_links (1.0.0):
+ - FlutterMacOS
+ - FlutterMacOS (1.0.0)
+ - path_provider_foundation (0.0.1):
+ - Flutter
+ - FlutterMacOS
+ - powersync-sqlite-core (0.4.5)
+ - powersync_flutter_libs (0.0.1):
+ - FlutterMacOS
+ - powersync-sqlite-core (~> 0.4.5)
+ - shared_preferences_foundation (0.0.1):
+ - Flutter
+ - FlutterMacOS
+ - sqlite3 (3.49.2):
+ - sqlite3/common (= 3.49.2)
+ - sqlite3/common (3.49.2)
+ - sqlite3/dbstatvtab (3.49.2):
+ - sqlite3/common
+ - sqlite3/fts5 (3.49.2):
+ - sqlite3/common
+ - sqlite3/math (3.49.2):
+ - sqlite3/common
+ - sqlite3/perf-threadsafe (3.49.2):
+ - sqlite3/common
+ - sqlite3/rtree (3.49.2):
+ - sqlite3/common
+ - sqlite3_flutter_libs (0.0.1):
+ - Flutter
+ - FlutterMacOS
+ - sqlite3 (~> 3.49.1)
+ - sqlite3/dbstatvtab
+ - sqlite3/fts5
+ - sqlite3/math
+ - sqlite3/perf-threadsafe
+ - sqlite3/rtree
+ - url_launcher_macos (0.0.1):
+ - FlutterMacOS
+
+DEPENDENCIES:
+ - app_links (from `Flutter/ephemeral/.symlinks/plugins/app_links/macos`)
+ - FlutterMacOS (from `Flutter/ephemeral`)
+ - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`)
+ - powersync_flutter_libs (from `Flutter/ephemeral/.symlinks/plugins/powersync_flutter_libs/macos`)
+ - shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`)
+ - sqlite3_flutter_libs (from `Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/darwin`)
+ - url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`)
+
+SPEC REPOS:
+ trunk:
+ - powersync-sqlite-core
+ - sqlite3
+
+EXTERNAL SOURCES:
+ app_links:
+ :path: Flutter/ephemeral/.symlinks/plugins/app_links/macos
+ FlutterMacOS:
+ :path: Flutter/ephemeral
+ path_provider_foundation:
+ :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin
+ powersync_flutter_libs:
+ :path: Flutter/ephemeral/.symlinks/plugins/powersync_flutter_libs/macos
+ shared_preferences_foundation:
+ :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin
+ sqlite3_flutter_libs:
+ :path: Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/darwin
+ url_launcher_macos:
+ :path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos
+
+SPEC CHECKSUMS:
+ app_links: afe860c55c7ef176cea7fb630a2b7d7736de591d
+ FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1
+ path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
+ powersync-sqlite-core: 6f32860379009d2a37cadc9e9427a431bdbd83c8
+ powersync_flutter_libs: 41d8a7b193abf15e46f95f0ec1229d86b6893171
+ shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
+ sqlite3: 3c950dc86011117c307eb0b28c4a7bb449dce9f1
+ sqlite3_flutter_libs: f6acaa2172e6bb3e2e70c771661905080e8ebcf2
+ url_launcher_macos: 0fba8ddabfc33ce0a9afe7c5fef5aab3d8d2d673
+
+PODFILE CHECKSUM: 9ebaf0ce3d369aaa26a9ea0e159195ed94724cf3
+
+COCOAPODS: 1.16.2
diff --git a/demos/supabase-simple-chat/macos/Runner.xcodeproj/project.pbxproj b/demos/supabase-simple-chat/macos/Runner.xcodeproj/project.pbxproj
index 7fe41dae..1c21cabe 100644
--- a/demos/supabase-simple-chat/macos/Runner.xcodeproj/project.pbxproj
+++ b/demos/supabase-simple-chat/macos/Runner.xcodeproj/project.pbxproj
@@ -21,6 +21,8 @@
/* End PBXAggregateTarget section */
/* Begin PBXBuildFile section */
+ 1E4CDBAEBE9154C7F26D0A91 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9733994F6B92C007FE8C102 /* Pods_Runner.framework */; };
+ 2A4895D0BF74E5000FECF75C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D1A3062AADC16F6873C7A88 /* Pods_RunnerTests.framework */; };
331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; };
335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; };
33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; };
@@ -64,7 +66,7 @@
331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; };
333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; };
335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; };
- 33CC10ED2044A3C60003C045 /* supabase_tutorial_chat_app.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "supabase_tutorial_chat_app.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 33CC10ED2044A3C60003C045 /* supabase_tutorial_chat_app.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = supabase_tutorial_chat_app.app; sourceTree = BUILT_PRODUCTS_DIR; };
33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; };
33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; };
@@ -76,8 +78,16 @@
33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; };
33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; };
33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; };
+ 4119129E140BF2A98A74E736 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; };
+ 414DA522E744E5F8711DCAB0 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; };
+ 4BABC2241892D6C3DF961EC6 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; };
+ 4EFA73CF76E64E7CC74AD3BD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; };
+ 99432E67B36414807BF78B2C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; };
+ 9B88A251F7A6114EC05D3BA1 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; };
+ 9D1A3062AADC16F6873C7A88 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ D9733994F6B92C007FE8C102 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -85,6 +95,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ 2A4895D0BF74E5000FECF75C /* Pods_RunnerTests.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -92,12 +103,27 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ 1E4CDBAEBE9154C7F26D0A91 /* Pods_Runner.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
+ 0272BFDB59D0F5397E903FC2 /* Pods */ = {
+ isa = PBXGroup;
+ children = (
+ 4BABC2241892D6C3DF961EC6 /* Pods-Runner.debug.xcconfig */,
+ 9B88A251F7A6114EC05D3BA1 /* Pods-Runner.release.xcconfig */,
+ 4EFA73CF76E64E7CC74AD3BD /* Pods-Runner.profile.xcconfig */,
+ 414DA522E744E5F8711DCAB0 /* Pods-RunnerTests.debug.xcconfig */,
+ 99432E67B36414807BF78B2C /* Pods-RunnerTests.release.xcconfig */,
+ 4119129E140BF2A98A74E736 /* Pods-RunnerTests.profile.xcconfig */,
+ );
+ name = Pods;
+ path = Pods;
+ sourceTree = "";
+ };
331C80D6294CF71000263BE5 /* RunnerTests */ = {
isa = PBXGroup;
children = (
@@ -125,6 +151,7 @@
331C80D6294CF71000263BE5 /* RunnerTests */,
33CC10EE2044A3C60003C045 /* Products */,
D73912EC22F37F3D000D13A0 /* Frameworks */,
+ 0272BFDB59D0F5397E903FC2 /* Pods */,
);
sourceTree = "";
};
@@ -175,6 +202,8 @@
D73912EC22F37F3D000D13A0 /* Frameworks */ = {
isa = PBXGroup;
children = (
+ D9733994F6B92C007FE8C102 /* Pods_Runner.framework */,
+ 9D1A3062AADC16F6873C7A88 /* Pods_RunnerTests.framework */,
);
name = Frameworks;
sourceTree = "";
@@ -186,6 +215,7 @@
isa = PBXNativeTarget;
buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
buildPhases = (
+ A8DB1B20C2102EDC8F456153 /* [CP] Check Pods Manifest.lock */,
331C80D1294CF70F00263BE5 /* Sources */,
331C80D2294CF70F00263BE5 /* Frameworks */,
331C80D3294CF70F00263BE5 /* Resources */,
@@ -204,11 +234,13 @@
isa = PBXNativeTarget;
buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
+ 355BF6106EDA763284A00066 /* [CP] Check Pods Manifest.lock */,
33CC10E92044A3C60003C045 /* Sources */,
33CC10EA2044A3C60003C045 /* Frameworks */,
33CC10EB2044A3C60003C045 /* Resources */,
33CC110E2044A8840003C045 /* Bundle Framework */,
3399D490228B24CF009A79C7 /* ShellScript */,
+ 5A07EE710C2C2774485C2634 /* [CP] Embed Pods Frameworks */,
);
buildRules = (
);
@@ -328,6 +360,67 @@
shellPath = /bin/sh;
shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire";
};
+ 355BF6106EDA763284A00066 /* [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-Runner-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;
+ };
+ 5A07EE710C2C2774485C2634 /* [CP] Embed Pods Frameworks */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Embed Pods Frameworks";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ A8DB1B20C2102EDC8F456153 /* [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-RunnerTests-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;
+ };
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
@@ -379,6 +472,7 @@
/* Begin XCBuildConfiguration section */
331C80DB294CF71000263BE5 /* Debug */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = 414DA522E744E5F8711DCAB0 /* Pods-RunnerTests.debug.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CURRENT_PROJECT_VERSION = 1;
@@ -393,6 +487,7 @@
};
331C80DC294CF71000263BE5 /* Release */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = 99432E67B36414807BF78B2C /* Pods-RunnerTests.release.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CURRENT_PROJECT_VERSION = 1;
@@ -407,6 +502,7 @@
};
331C80DD294CF71000263BE5 /* Profile */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = 4119129E140BF2A98A74E736 /* Pods-RunnerTests.profile.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CURRENT_PROJECT_VERSION = 1;
diff --git a/demos/supabase-simple-chat/macos/Runner.xcworkspace/contents.xcworkspacedata b/demos/supabase-simple-chat/macos/Runner.xcworkspace/contents.xcworkspacedata
index 1d526a16..21a3cc14 100644
--- a/demos/supabase-simple-chat/macos/Runner.xcworkspace/contents.xcworkspacedata
+++ b/demos/supabase-simple-chat/macos/Runner.xcworkspace/contents.xcworkspacedata
@@ -4,4 +4,7 @@
+
+
diff --git a/demos/supabase-simple-chat/pubspec.lock b/demos/supabase-simple-chat/pubspec.lock
index bfc1ed6a..d65ac498 100644
--- a/demos/supabase-simple-chat/pubspec.lock
+++ b/demos/supabase-simple-chat/pubspec.lock
@@ -5,10 +5,10 @@ packages:
dependency: transitive
description:
name: app_links
- sha256: f04c3ca96426baba784c736a201926bd4145524c36a1b38942a351b033305e21
+ sha256: "85ed8fc1d25a76475914fff28cc994653bd900bc2c26e4b57a49e097febb54ba"
url: "https://pub.dev"
source: hosted
- version: "6.2.1"
+ version: "6.4.0"
app_links_linux:
dependency: transitive
description:
@@ -37,34 +37,34 @@ packages:
dependency: transitive
description:
name: args
- sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a"
+ sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
url: "https://pub.dev"
source: hosted
- version: "2.5.0"
+ version: "2.7.0"
async:
dependency: transitive
description:
name: async
- sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
+ sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb"
url: "https://pub.dev"
source: hosted
- version: "2.11.0"
+ version: "2.13.0"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
- sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
+ sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
url: "https://pub.dev"
source: hosted
- version: "2.1.1"
+ version: "2.1.2"
characters:
dependency: transitive
description:
name: characters
- sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
+ sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
url: "https://pub.dev"
source: hosted
- version: "1.3.0"
+ version: "1.4.0"
checked_yaml:
dependency: transitive
description:
@@ -77,26 +77,26 @@ packages:
dependency: transitive
description:
name: clock
- sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
+ sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
url: "https://pub.dev"
source: hosted
- version: "1.1.1"
+ version: "1.1.2"
collection:
dependency: transitive
description:
name: collection
- sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
+ sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
url: "https://pub.dev"
source: hosted
- version: "1.18.0"
+ version: "1.19.1"
crypto:
dependency: transitive
description:
name: crypto
- sha256: ec30d999af904f33454ba22ed9a86162b35e52b44ac4807d1d93c288041d7d27
+ sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855"
url: "https://pub.dev"
source: hosted
- version: "3.0.5"
+ version: "3.0.6"
cupertino_icons:
dependency: "direct main"
description:
@@ -109,50 +109,34 @@ packages:
dependency: transitive
description:
name: fake_async
- sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
- url: "https://pub.dev"
- source: hosted
- version: "1.3.1"
- fetch_api:
- dependency: transitive
- description:
- name: fetch_api
- sha256: "97f46c25b480aad74f7cc2ad7ccba2c5c6f08d008e68f95c1077286ce243d0e6"
+ sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
url: "https://pub.dev"
source: hosted
- version: "2.2.0"
- fetch_client:
- dependency: transitive
- description:
- name: fetch_client
- sha256: "9666ee14536778474072245ed5cba07db81ae8eb5de3b7bf4a2d1e2c49696092"
- url: "https://pub.dev"
- source: hosted
- version: "1.1.2"
+ version: "1.3.3"
ffi:
dependency: transitive
description:
name: ffi
- sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6"
+ sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418"
url: "https://pub.dev"
source: hosted
- version: "2.1.3"
+ version: "2.1.4"
file:
dependency: transitive
description:
name: file
- sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c"
+ sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4
url: "https://pub.dev"
source: hosted
- version: "7.0.0"
+ version: "7.0.1"
fixnum:
dependency: transitive
description:
name: fixnum
- sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1"
+ sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be
url: "https://pub.dev"
source: hosted
- version: "1.1.0"
+ version: "1.1.1"
flutter:
dependency: "direct main"
description: flutter
@@ -180,18 +164,18 @@ packages:
dependency: transitive
description:
name: functions_client
- sha256: e63f49cd3b41727f47b3bde284a11a4ac62839e0604f64077d4257487510e484
+ sha256: b410e4d609522357396cd84bb9a8f6e3a4561b5f7d3ce82267f6f1c2af42f16b
url: "https://pub.dev"
source: hosted
- version: "2.3.2"
+ version: "2.4.2"
gotrue:
dependency: transitive
description:
name: gotrue
- sha256: "8703db795511f69194fe77125a0c838bbb6befc2f95717b6e40331784a8bdecb"
+ sha256: "04a6efacffd42773ed96dc752f19bb20a1fbc383e81ba82659072b775cf62912"
url: "https://pub.dev"
source: hosted
- version: "2.8.4"
+ version: "2.12.0"
gtk:
dependency: transitive
description:
@@ -204,18 +188,18 @@ packages:
dependency: transitive
description:
name: http
- sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010
+ sha256: "2c11f3f94c687ee9bad77c171151672986360b2b001d109814ee7140b2cf261b"
url: "https://pub.dev"
source: hosted
- version: "1.2.2"
+ version: "1.4.0"
http_parser:
dependency: transitive
description:
name: http_parser
- sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b"
+ sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
url: "https://pub.dev"
source: hosted
- version: "4.0.2"
+ version: "4.1.2"
intl:
dependency: transitive
description:
@@ -224,14 +208,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.19.0"
- js:
- dependency: transitive
- description:
- name: js
- sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf
- url: "https://pub.dev"
- source: hosted
- version: "0.7.1"
json_annotation:
dependency: transitive
description:
@@ -252,18 +228,18 @@ packages:
dependency: transitive
description:
name: leak_tracker
- sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05"
+ sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0"
url: "https://pub.dev"
source: hosted
- version: "10.0.5"
+ version: "10.0.9"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
- sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806"
+ sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
url: "https://pub.dev"
source: hosted
- version: "3.0.5"
+ version: "3.0.9"
leak_tracker_testing:
dependency: transitive
description:
@@ -284,18 +260,18 @@ packages:
dependency: "direct main"
description:
name: logging
- sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340"
+ sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
url: "https://pub.dev"
source: hosted
- version: "1.2.0"
+ version: "1.3.0"
matcher:
dependency: transitive
description:
name: matcher
- sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
+ sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
url: "https://pub.dev"
source: hosted
- version: "0.12.16+1"
+ version: "0.12.17"
material_color_utilities:
dependency: transitive
description:
@@ -308,18 +284,18 @@ packages:
dependency: transitive
description:
name: meta
- sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
+ sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
url: "https://pub.dev"
source: hosted
- version: "1.15.0"
+ version: "1.16.0"
mime:
dependency: transitive
description:
name: mime
- sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2"
+ sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6"
url: "https://pub.dev"
source: hosted
- version: "1.0.5"
+ version: "2.0.0"
mutex:
dependency: transitive
description:
@@ -332,34 +308,34 @@ packages:
dependency: "direct main"
description:
name: path
- sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
+ sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
url: "https://pub.dev"
source: hosted
- version: "1.9.0"
+ version: "1.9.1"
path_provider:
dependency: "direct main"
description:
name: path_provider
- sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378
+ sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd"
url: "https://pub.dev"
source: hosted
- version: "2.1.4"
+ version: "2.1.5"
path_provider_android:
dependency: transitive
description:
name: path_provider_android
- sha256: "6f01f8e37ec30b07bc424b4deabac37cacb1bc7e2e515ad74486039918a37eb7"
+ sha256: d0d310befe2c8ab9e7f393288ccbb11b60c019c6b5afc21973eeee4dda2b35e9
url: "https://pub.dev"
source: hosted
- version: "2.2.10"
+ version: "2.2.17"
path_provider_foundation:
dependency: transitive
description:
name: path_provider_foundation
- sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16
+ sha256: "4843174df4d288f5e29185bd6e72a6fbdf5a4a4602717eed565497429f179942"
url: "https://pub.dev"
source: hosted
- version: "2.4.0"
+ version: "2.4.1"
path_provider_linux:
dependency: transitive
description:
@@ -388,10 +364,10 @@ packages:
dependency: transitive
description:
name: platform
- sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65"
+ sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984"
url: "https://pub.dev"
source: hosted
- version: "3.1.5"
+ version: "3.1.6"
plugin_platform_interface:
dependency: transitive
description:
@@ -404,48 +380,55 @@ packages:
dependency: transitive
description:
name: postgrest
- sha256: c4197238601c7c3103b03a4bb77f2050b17d0064bf8b968309421abdebbb7f0e
+ sha256: "10b81a23b1c829ccadf68c626b4d66666453a1474d24c563f313f5ca7851d575"
url: "https://pub.dev"
source: hosted
- version: "2.1.4"
+ version: "2.4.2"
powersync:
dependency: "direct main"
description:
path: "../../packages/powersync"
relative: true
source: path
- version: "1.9.2"
+ version: "1.15.0"
+ powersync_core:
+ dependency: "direct overridden"
+ description:
+ path: "../../packages/powersync_core"
+ relative: true
+ source: path
+ version: "1.5.0"
powersync_flutter_libs:
dependency: "direct overridden"
description:
path: "../../packages/powersync_flutter_libs"
relative: true
source: path
- version: "0.4.2"
+ version: "0.4.10"
pub_semver:
dependency: transitive
description:
name: pub_semver
- sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c"
+ sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585"
url: "https://pub.dev"
source: hosted
- version: "2.1.4"
+ version: "2.2.0"
pubspec_parse:
dependency: transitive
description:
name: pubspec_parse
- sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8
+ sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082"
url: "https://pub.dev"
source: hosted
- version: "1.3.0"
+ version: "1.5.0"
realtime_client:
dependency: transitive
description:
name: realtime_client
- sha256: d897a65ee3b1b5ddc1cf606f0b83792262d38fd5679c2df7e38da29c977513da
+ sha256: "3a0a99b5bd0fc3b35e8ee846d9a22fa2c2117f7ef1cb73d1e5f08f6c3d09c4e9"
url: "https://pub.dev"
source: hosted
- version: "2.2.1"
+ version: "2.5.0"
retry:
dependency: transitive
description:
@@ -466,26 +449,26 @@ packages:
dependency: transitive
description:
name: shared_preferences
- sha256: "746e5369a43170c25816cc472ee016d3a66bc13fcf430c0bc41ad7b4b2922051"
+ sha256: "6e8bf70b7fef813df4e9a36f658ac46d107db4b4cfe1048b477d4e453a8159f5"
url: "https://pub.dev"
source: hosted
- version: "2.3.2"
+ version: "2.5.3"
shared_preferences_android:
dependency: transitive
description:
name: shared_preferences_android
- sha256: a7e8467e9181cef109f601e3f65765685786c1a738a83d7fbbde377589c0d974
+ sha256: "20cbd561f743a342c76c151d6ddb93a9ce6005751e7aa458baad3858bfbfb6ac"
url: "https://pub.dev"
source: hosted
- version: "2.3.1"
+ version: "2.4.10"
shared_preferences_foundation:
dependency: transitive
description:
name: shared_preferences_foundation
- sha256: c4b35f6cb8f63c147312c054ce7c2254c8066745125264f0c88739c417fc9d9f
+ sha256: "6a52cfcdaeac77cad8c97b539ff688ccfc458c007b4db12be584fbe5c0e49e03"
url: "https://pub.dev"
source: hosted
- version: "2.5.2"
+ version: "2.5.4"
shared_preferences_linux:
dependency: transitive
description:
@@ -506,10 +489,10 @@ packages:
dependency: transitive
description:
name: shared_preferences_web
- sha256: d2ca4132d3946fec2184261726b355836a82c33d7d5b67af32692aff18a4684e
+ sha256: c49bd060261c9a3f0ff445892695d6212ff603ef3115edbb448509d407600019
url: "https://pub.dev"
source: hosted
- version: "2.4.2"
+ version: "2.4.3"
shared_preferences_windows:
dependency: transitive
description:
@@ -522,15 +505,15 @@ packages:
dependency: transitive
description: flutter
source: sdk
- version: "0.0.99"
+ version: "0.0.0"
source_span:
dependency: transitive
description:
name: source_span
- sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
+ sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
url: "https://pub.dev"
source: hosted
- version: "1.10.0"
+ version: "1.10.1"
sprintf:
dependency: transitive
description:
@@ -543,98 +526,98 @@ packages:
dependency: transitive
description:
name: sqlite3
- sha256: bb174b3ec2527f9c5f680f73a89af8149dd99782fbb56ea88ad0807c5638f2ed
+ sha256: "310af39c40dd0bb2058538333c9d9840a2725ae0b9f77e4fd09ad6696aa8f66e"
url: "https://pub.dev"
source: hosted
- version: "2.4.7"
+ version: "2.7.5"
sqlite3_flutter_libs:
dependency: transitive
description:
name: sqlite3_flutter_libs
- sha256: "62bbb4073edbcdf53f40c80775f33eea01d301b7b81417e5b3fb7395416258c1"
+ sha256: "1a96b59227828d9eb1463191d684b37a27d66ee5ed7597fcf42eee6452c88a14"
url: "https://pub.dev"
source: hosted
- version: "0.5.24"
+ version: "0.5.32"
sqlite3_web:
dependency: transitive
description:
name: sqlite3_web
- sha256: f22d1dda7a40be0867984f55cdf5c2d599e5f05d3be4a642d78f38b38983f554
+ sha256: "967e076442f7e1233bd7241ca61f3efe4c7fc168dac0f38411bdb3bdf471eb3c"
url: "https://pub.dev"
source: hosted
- version: "0.2.0"
+ version: "0.3.1"
sqlite_async:
dependency: transitive
description:
name: sqlite_async
- sha256: d66fb6e6d07c1a834743326c033029f75becbb1fad6823d709f921872abc3d5b
+ sha256: a60e8d5c8df8e694933bd5a312c38393e79ad77d784bb91c6f38ba627bfb7aec
url: "https://pub.dev"
source: hosted
- version: "0.11.0"
+ version: "0.11.4"
stack_trace:
dependency: transitive
description:
name: stack_trace
- sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
+ sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
url: "https://pub.dev"
source: hosted
- version: "1.11.1"
+ version: "1.12.1"
storage_client:
dependency: transitive
description:
name: storage_client
- sha256: "28c147c805304dbc2b762becd1fc26ee0cb621ace3732b9ae61ef979aab8b367"
+ sha256: "09bac4d75eea58e8113ca928e6655a09cc8059e6d1b472ee801f01fde815bcfc"
url: "https://pub.dev"
source: hosted
- version: "2.0.3"
+ version: "2.4.0"
stream_channel:
dependency: transitive
description:
name: stream_channel
- sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
+ sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
url: "https://pub.dev"
source: hosted
- version: "2.1.2"
+ version: "2.1.4"
string_scanner:
dependency: transitive
description:
name: string_scanner
- sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
+ sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
url: "https://pub.dev"
source: hosted
- version: "1.2.0"
+ version: "1.4.1"
supabase:
dependency: transitive
description:
name: supabase
- sha256: "4ed1cf3298f39865c05b2d8557f92eb131a9b9af70e32e218672a0afce01a6bc"
+ sha256: f00172f5f0b2148ea1c573f52862d50cacb6f353f579f741fa35e51704845958
url: "https://pub.dev"
source: hosted
- version: "2.3.0"
+ version: "2.7.0"
supabase_flutter:
dependency: "direct main"
description:
name: supabase_flutter
- sha256: ff6ba3048fd47d831fdc0027d3efb99346d99b95becfcb406562454bd9b229c5
+ sha256: d88eccf9e46e57129725a08e72a3109b6f780921fdc27fe3d7669a11ae80906b
url: "https://pub.dev"
source: hosted
- version: "2.6.0"
+ version: "2.9.0"
term_glyph:
dependency: transitive
description:
name: term_glyph
- sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
+ sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
url: "https://pub.dev"
source: hosted
- version: "1.2.1"
+ version: "1.2.2"
test_api:
dependency: transitive
description:
name: test_api
- sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb"
+ sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
url: "https://pub.dev"
source: hosted
- version: "0.7.2"
+ version: "0.7.4"
timeago:
dependency: "direct main"
description:
@@ -647,10 +630,10 @@ packages:
dependency: transitive
description:
name: typed_data
- sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c
+ sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
url: "https://pub.dev"
source: hosted
- version: "1.3.2"
+ version: "1.4.0"
universal_io:
dependency: "direct main"
description:
@@ -663,42 +646,42 @@ packages:
dependency: transitive
description:
name: url_launcher
- sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3"
+ sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603"
url: "https://pub.dev"
source: hosted
- version: "6.3.0"
+ version: "6.3.1"
url_launcher_android:
dependency: transitive
description:
name: url_launcher_android
- sha256: f0c73347dfcfa5b3db8bc06e1502668265d39c08f310c29bff4e28eea9699f79
+ sha256: "8582d7f6fe14d2652b4c45c9b6c14c0b678c2af2d083a11b604caeba51930d79"
url: "https://pub.dev"
source: hosted
- version: "6.3.9"
+ version: "6.3.16"
url_launcher_ios:
dependency: transitive
description:
name: url_launcher_ios
- sha256: e43b677296fadce447e987a2f519dcf5f6d1e527dc35d01ffab4fff5b8a7063e
+ sha256: "7f2022359d4c099eea7df3fdf739f7d3d3b9faf3166fb1dd390775176e0b76cb"
url: "https://pub.dev"
source: hosted
- version: "6.3.1"
+ version: "6.3.3"
url_launcher_linux:
dependency: transitive
description:
name: url_launcher_linux
- sha256: e2b9622b4007f97f504cd64c0128309dfb978ae66adbe944125ed9e1750f06af
+ sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935"
url: "https://pub.dev"
source: hosted
- version: "3.2.0"
+ version: "3.2.1"
url_launcher_macos:
dependency: transitive
description:
name: url_launcher_macos
- sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de"
+ sha256: "17ba2000b847f334f16626a574c702b196723af2a289e7a93ffcb79acff855c2"
url: "https://pub.dev"
source: hosted
- version: "3.2.0"
+ version: "3.2.2"
url_launcher_platform_interface:
dependency: transitive
description:
@@ -711,26 +694,26 @@ packages:
dependency: transitive
description:
name: url_launcher_web
- sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e"
+ sha256: "4bd2b7b4dc4d4d0b94e5babfffbca8eac1a126c7f3d6ecbc1a11013faa3abba2"
url: "https://pub.dev"
source: hosted
- version: "2.3.3"
+ version: "2.4.1"
url_launcher_windows:
dependency: transitive
description:
name: url_launcher_windows
- sha256: "49c10f879746271804767cb45551ec5592cdab00ee105c06dddde1a98f73b185"
+ sha256: "3284b6d2ac454cf34f114e1d3319866fdd1e19cdc329999057e44ffe936cfa77"
url: "https://pub.dev"
source: hosted
- version: "3.1.2"
+ version: "3.1.4"
uuid:
dependency: transitive
description:
name: uuid
- sha256: "83d37c7ad7aaf9aa8e275490669535c8080377cfa7a7004c24dfac53afffaa90"
+ sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff
url: "https://pub.dev"
source: hosted
- version: "4.4.2"
+ version: "4.5.1"
vector_math:
dependency: transitive
description:
@@ -743,58 +726,58 @@ packages:
dependency: transitive
description:
name: vm_service
- sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d"
+ sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02
url: "https://pub.dev"
source: hosted
- version: "14.2.5"
+ version: "15.0.0"
web:
dependency: transitive
description:
name: web
- sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb
+ sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
url: "https://pub.dev"
source: hosted
- version: "1.1.0"
+ version: "1.1.1"
web_socket:
dependency: transitive
description:
name: web_socket
- sha256: "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83"
+ sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c"
url: "https://pub.dev"
source: hosted
- version: "0.1.6"
+ version: "1.0.1"
web_socket_channel:
dependency: transitive
description:
name: web_socket_channel
- sha256: "9f187088ed104edd8662ca07af4b124465893caf063ba29758f97af57e61da8f"
+ sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8
url: "https://pub.dev"
source: hosted
- version: "3.0.1"
+ version: "3.0.3"
xdg_directories:
dependency: transitive
description:
name: xdg_directories
- sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d
+ sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15"
url: "https://pub.dev"
source: hosted
- version: "1.0.4"
+ version: "1.1.0"
yaml:
dependency: transitive
description:
name: yaml
- sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5"
+ sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
url: "https://pub.dev"
source: hosted
- version: "3.1.2"
+ version: "3.1.3"
yet_another_json_isolate:
dependency: transitive
description:
name: yet_another_json_isolate
- sha256: "47ed3900e6b0e4dfe378811a4402e85b7fc126a7daa94f840fef65ea9c8e46f4"
+ sha256: fe45897501fa156ccefbfb9359c9462ce5dec092f05e8a56109db30be864f01e
url: "https://pub.dev"
source: hosted
- version: "2.0.2"
+ version: "2.1.0"
sdks:
- dart: ">=3.4.0 <4.0.0"
- flutter: ">=3.22.0"
+ dart: ">=3.7.0 <4.0.0"
+ flutter: ">=3.27.0"
diff --git a/demos/supabase-simple-chat/pubspec.yaml b/demos/supabase-simple-chat/pubspec.yaml
index 3e563cf8..463278d2 100644
--- a/demos/supabase-simple-chat/pubspec.yaml
+++ b/demos/supabase-simple-chat/pubspec.yaml
@@ -37,7 +37,7 @@ dependencies:
supabase_flutter: ^2.0.2
timeago: ^3.6.0
- powersync: ^1.9.3
+ powersync: ^1.16.1
path_provider: ^2.1.1
path: ^1.8.3
logging: ^1.2.0
diff --git a/demos/supabase-todolist-drift/.gitignore b/demos/supabase-todolist-drift/.gitignore
index b5e97dcc..f4850867 100644
--- a/demos/supabase-todolist-drift/.gitignore
+++ b/demos/supabase-todolist-drift/.gitignore
@@ -5,9 +5,11 @@
*.swp
.DS_Store
.atom/
+.build/
.buildlog/
.history
.svn/
+.swiftpm/
migrate_working_dir/
# IntelliJ related
diff --git a/demos/supabase-todolist-drift/README.md b/demos/supabase-todolist-drift/README.md
index 7b8d632e..0fd2661a 100644
--- a/demos/supabase-todolist-drift/README.md
+++ b/demos/supabase-todolist-drift/README.md
@@ -1,6 +1,7 @@
# PowerSync + Supabase + Drift Flutter Demo: Todo List App
This demo app is an extension of the [Supabase Todo List App](../supabase-todolist/README.md) and showcases how to set up and use the [drift_sqlite_async](https://pub.dev/packages/drift_sqlite_async) library (Drift ORM) with PowerSync.
+This demo also uses [riverpod](https://riverpod.dev) to highlight best practices for state management.
Notes about the Drift usage are [further below](#drift).
@@ -52,5 +53,5 @@ Insert the credentials of your new Supabase and PowerSync projects into `lib/app
The `database.g.dart` file containing the \_$AppDatabase class has to be generated if there are changes made to the `database.dart` file.
- `dart run build_runner build` generates all the required code once.
-- `dart run build_runner build --delete-conflicting-outputs` deletes previously generated files and generates the required code once.
+- `dart run build_runner build -d` deletes previously generated files and generates the required code once.
- `dart run build_runner watch` watches for changes in your sources and generates code with incremental rebuilds. This is better for development.
diff --git a/demos/supabase-todolist-drift/analysis_options.yaml b/demos/supabase-todolist-drift/analysis_options.yaml
index 8648a0cd..adcc25de 100644
--- a/demos/supabase-todolist-drift/analysis_options.yaml
+++ b/demos/supabase-todolist-drift/analysis_options.yaml
@@ -1,3 +1,7 @@
include: package:flutter_lints/flutter.yaml
analyzer:
exclude: [lib/**.g.dart]
+
+linter:
+ rules:
+ - prefer_relative_imports
diff --git a/demos/supabase-todolist-drift/database.sql b/demos/supabase-todolist-drift/database.sql
new file mode 100644
index 00000000..eecc9768
--- /dev/null
+++ b/demos/supabase-todolist-drift/database.sql
@@ -0,0 +1,71 @@
+-- Create tables
+create table
+ public.lists (
+ id uuid not null default gen_random_uuid (),
+ created_at timestamp with time zone not null default now(),
+ name text not null,
+ owner_id uuid not null,
+ constraint lists_pkey primary key (id),
+ constraint lists_owner_id_fkey foreign key (owner_id) references auth.users (id) on delete cascade
+ ) tablespace pg_default;
+
+create table
+ public.todos (
+ id uuid not null default gen_random_uuid (),
+ created_at timestamp with time zone not null default now(),
+ completed_at timestamp with time zone null,
+ description text not null,
+ completed boolean not null default false,
+ created_by uuid null,
+ completed_by uuid null,
+ list_id uuid not null,
+ photo_id uuid null,
+ constraint todos_pkey primary key (id),
+ constraint todos_created_by_fkey foreign key (created_by) references auth.users (id) on delete set null,
+ constraint todos_completed_by_fkey foreign key (completed_by) references auth.users (id) on delete set null,
+ constraint todos_list_id_fkey foreign key (list_id) references lists (id) on delete cascade
+ ) tablespace pg_default;
+
+-- Create publication for powersync
+create publication powersync for table lists, todos;
+
+-- Set up Row Level Security (RLS)
+-- See https://supabase.com/docs/guides/auth/row-level-security for more details.
+alter table public.lists
+ enable row level security;
+
+alter table public.todos
+ enable row level security;
+
+create policy "owned lists" on public.lists for ALL using (
+ auth.uid() = owner_id
+);
+
+create policy "todos in owned lists" on public.todos for ALL using (
+ auth.uid() IN (
+ SELECT lists.owner_id FROM lists WHERE (lists.id = todos.list_id)
+ )
+);
+
+-- This trigger automatically creates some sample data when a user registers.
+-- See https://supabase.com/docs/guides/auth/managing-user-data#using-triggers for more details.
+create function public.handle_new_user_sample_data()
+returns trigger as $$
+declare
+ new_list_id uuid;
+begin
+ insert into public.lists (name, owner_id)
+ values ('Shopping list', new.id)
+ returning id into new_list_id;
+
+ insert into public.todos(description, list_id, created_by)
+ values ('Bread', new_list_id, new.id);
+
+ insert into public.todos(description, list_id, created_by)
+ values ('Apples', new_list_id, new.id);
+
+ return new;
+end;
+$$ language plpgsql security definer;
+
+create trigger new_user_sample_data after insert on auth.users for each row execute procedure public.handle_new_user_sample_data();
diff --git a/demos/supabase-todolist-drift/ios/Flutter/AppFrameworkInfo.plist b/demos/supabase-todolist-drift/ios/Flutter/AppFrameworkInfo.plist
index 7c569640..1dc6cf76 100644
--- a/demos/supabase-todolist-drift/ios/Flutter/AppFrameworkInfo.plist
+++ b/demos/supabase-todolist-drift/ios/Flutter/AppFrameworkInfo.plist
@@ -21,6 +21,6 @@
CFBundleVersion
1.0
MinimumOSVersion
- 12.0
+ 13.0
diff --git a/demos/supabase-todolist-drift/ios/Podfile.lock b/demos/supabase-todolist-drift/ios/Podfile.lock
deleted file mode 100644
index 58930a79..00000000
--- a/demos/supabase-todolist-drift/ios/Podfile.lock
+++ /dev/null
@@ -1,85 +0,0 @@
-PODS:
- - app_links (0.0.1):
- - Flutter
- - camera_avfoundation (0.0.1):
- - Flutter
- - Flutter (1.0.0)
- - path_provider_foundation (0.0.1):
- - Flutter
- - FlutterMacOS
- - powersync-sqlite-core (0.3.0)
- - powersync_flutter_libs (0.0.1):
- - Flutter
- - powersync-sqlite-core (~> 0.3.0)
- - shared_preferences_foundation (0.0.1):
- - Flutter
- - FlutterMacOS
- - "sqlite3 (3.46.0+1)":
- - "sqlite3/common (= 3.46.0+1)"
- - "sqlite3/common (3.46.0+1)"
- - "sqlite3/dbstatvtab (3.46.0+1)":
- - sqlite3/common
- - "sqlite3/fts5 (3.46.0+1)":
- - sqlite3/common
- - "sqlite3/perf-threadsafe (3.46.0+1)":
- - sqlite3/common
- - "sqlite3/rtree (3.46.0+1)":
- - sqlite3/common
- - sqlite3_flutter_libs (0.0.1):
- - Flutter
- - "sqlite3 (~> 3.46.0+1)"
- - sqlite3/dbstatvtab
- - sqlite3/fts5
- - sqlite3/perf-threadsafe
- - sqlite3/rtree
- - url_launcher_ios (0.0.1):
- - Flutter
-
-DEPENDENCIES:
- - app_links (from `.symlinks/plugins/app_links/ios`)
- - camera_avfoundation (from `.symlinks/plugins/camera_avfoundation/ios`)
- - Flutter (from `Flutter`)
- - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
- - powersync_flutter_libs (from `.symlinks/plugins/powersync_flutter_libs/ios`)
- - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
- - sqlite3_flutter_libs (from `.symlinks/plugins/sqlite3_flutter_libs/ios`)
- - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
-
-SPEC REPOS:
- trunk:
- - powersync-sqlite-core
- - sqlite3
-
-EXTERNAL SOURCES:
- app_links:
- :path: ".symlinks/plugins/app_links/ios"
- camera_avfoundation:
- :path: ".symlinks/plugins/camera_avfoundation/ios"
- Flutter:
- :path: Flutter
- path_provider_foundation:
- :path: ".symlinks/plugins/path_provider_foundation/darwin"
- powersync_flutter_libs:
- :path: ".symlinks/plugins/powersync_flutter_libs/ios"
- shared_preferences_foundation:
- :path: ".symlinks/plugins/shared_preferences_foundation/darwin"
- sqlite3_flutter_libs:
- :path: ".symlinks/plugins/sqlite3_flutter_libs/ios"
- url_launcher_ios:
- :path: ".symlinks/plugins/url_launcher_ios/ios"
-
-SPEC CHECKSUMS:
- app_links: e70ca16b4b0f88253b3b3660200d4a10b4ea9795
- camera_avfoundation: dd002b0330f4981e1bbcb46ae9b62829237459a4
- Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
- path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
- powersync-sqlite-core: ad0e70e23bacd858fe2e79032dc4aabdf972d1bd
- powersync_flutter_libs: 064c44b51fb07df9486b735fb96ab7608a89e18b
- shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78
- sqlite3: 292c3e1bfe89f64e51ea7fc7dab9182a017c8630
- sqlite3_flutter_libs: c00457ebd31e59fa6bb830380ddba24d44fbcd3b
- url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe
-
-PODFILE CHECKSUM: 819463e6a0290f5a72f145ba7cde16e8b6ef0796
-
-COCOAPODS: 1.15.2
diff --git a/demos/supabase-todolist-drift/ios/Runner.xcodeproj/project.pbxproj b/demos/supabase-todolist-drift/ios/Runner.xcodeproj/project.pbxproj
index 94547304..ad2605c8 100644
--- a/demos/supabase-todolist-drift/ios/Runner.xcodeproj/project.pbxproj
+++ b/demos/supabase-todolist-drift/ios/Runner.xcodeproj/project.pbxproj
@@ -8,11 +8,10 @@
/* Begin PBXBuildFile section */
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
- 2AA95F4BD1106733AA65B3D1 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7F26FE8A2AE7EB1DCD03A63 /* Pods_RunnerTests.framework */; };
331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
- 6B669B18D5922DF2E9FF3231 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DC37C372644D968F6312083 /* Pods_Runner.framework */; };
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
+ 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
@@ -44,16 +43,12 @@
/* Begin PBXFileReference section */
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; };
- 15AA756A195A0498929C7AB8 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; };
331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; };
331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; };
- 4ABD541213112FCC0D84BBA6 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; };
- 53F1849573A471693AAF7757 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; };
- 5AB1DDF473ECE5996A267CFC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; };
- 5DC37C372644D968F6312083 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "