Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
fd6402a
ci: add GitHub Actions workflows for code quality, coverage, and inte…
protheeuz Jan 30, 2026
5c80811
ci: add release drafter configuration for automated changelog generation
protheeuz Jan 30, 2026
5d61943
chore: add CODEOWNERS file for repository maintainers
protheeuz Jan 30, 2026
c36ecd5
docs: update root README with comprehensive documentation and profess…
protheeuz Jan 30, 2026
c6be581
docs: update root CHANGELOG with version history and breaking changes
protheeuz Jan 30, 2026
db0957c
chore: update gitignore for monorepo structure
protheeuz Jan 30, 2026
94b454c
chore: update analysis options for very_good_analysis linting
protheeuz Jan 30, 2026
e314da5
docs: update LICENSE copyright year
protheeuz Jan 30, 2026
72f4fc6
chore: migrate to monorepo structure with Melos workspace
protheeuz Jan 30, 2026
356e571
chore: update Flutter plugins dependencies
protheeuz Jan 30, 2026
fe7a2cb
feat: add comprehensive monorepo packages structure with platform imp…
protheeuz Jan 30, 2026
91f5b5e
chore: remove old v1 library files for migration to monorepo
protheeuz Jan 30, 2026
3dc8146
chore: remove Flutter plugins file
protheeuz Jan 30, 2026
9136228
chore(ci): fix workflows, coverage path, and address security warnings
protheeuz Jan 30, 2026
559a037
fix(ci): correct melos format command syntax
protheeuz Jan 30, 2026
073298e
chore: update REAMDE.md with actual support
protheeuz Jan 30, 2026
e71d89c
security(encryption): use cryptographically secure random key generation
protheeuz Jan 30, 2026
88f696c
fix(storage): use JSON for robust key-value serialization
protheeuz Jan 30, 2026
a2ac2db
docs(security): replace insecure KDF example with proper PBKDF2 imple…
protheeuz Jan 30, 2026
006480e
fix(query): implement proper SQL generation for nested conditions
protheeuz Jan 30, 2026
5f3a9f0
docs(readme): fix incorrect TableSchema example in Quick Start
protheeuz Jan 30, 2026
bfdd1bb
docs(readme): fix incorrect transaction API example
protheeuz Jan 30, 2026
39938f2
docs(readme): fix all non-existent API examples with actual implement…
protheeuz Jan 30, 2026
292a19a
fix(example): correct multi-space screen to use consistent key-value API
protheeuz Jan 30, 2026
44a4939
chore(gitignore): remove coverage files from version control
protheeuz Jan 30, 2026
0cd05bf
docs(security): fix incorrect rotateEncryptionKey API reference
protheeuz Jan 30, 2026
82e0494
test(mock): fix UPDATE handler and add batch operation support
protheeuz Jan 30, 2026
81bb5c4
fix(test): resolve CI test failures in query builder and storage engine
protheeuz Jan 30, 2026
1b500e3
fix: add a guard to handle cases where there are no tables to back up
protheeuz Jan 30, 2026
8ae4876
docs: update README.md to match the new API
protheeuz Jan 30, 2026
9003b9b
fix: use asynchronous `await file.exists()` to keep the operation non…
protheeuz Jan 30, 2026
d419554
style(test): remove extra blank lines for code formatting compliance
protheeuz Jan 30, 2026
6db5f80
fix(security): improve encryption key generation and metadata seriali…
protheeuz Jan 30, 2026
df2c35d
fix(core): resolve critical bugs and improve data integrity
protheeuz Jan 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 0 additions & 13 deletions .flutter-plugins

This file was deleted.

2 changes: 1 addition & 1 deletion .flutter-plugins-dependencies
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"path_provider_foundation","path":"C:\\\\Users\\\\iqbal\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\path_provider_foundation-2.4.0\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[]},{"name":"shared_preferences_foundation","path":"C:\\\\Users\\\\iqbal\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\shared_preferences_foundation-2.4.0\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[]},{"name":"sqflite","path":"C:\\\\Users\\\\iqbal\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\sqflite-2.3.3+1\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[]}],"android":[{"name":"path_provider_android","path":"C:\\\\Users\\\\iqbal\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\path_provider_android-2.2.6\\\\","native_build":true,"dependencies":[]},{"name":"shared_preferences_android","path":"C:\\\\Users\\\\iqbal\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\shared_preferences_android-2.2.3\\\\","native_build":true,"dependencies":[]},{"name":"sqflite","path":"C:\\\\Users\\\\iqbal\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\sqflite-2.3.3+1\\\\","native_build":true,"dependencies":[]}],"macos":[{"name":"path_provider_foundation","path":"C:\\\\Users\\\\iqbal\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\path_provider_foundation-2.4.0\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[]},{"name":"shared_preferences_foundation","path":"C:\\\\Users\\\\iqbal\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\shared_preferences_foundation-2.4.0\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[]},{"name":"sqflite","path":"C:\\\\Users\\\\iqbal\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\sqflite-2.3.3+1\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[]}],"linux":[{"name":"path_provider_linux","path":"C:\\\\Users\\\\iqbal\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\path_provider_linux-2.2.1\\\\","native_build":false,"dependencies":[]},{"name":"shared_preferences_linux","path":"C:\\\\Users\\\\iqbal\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\shared_preferences_linux-2.3.2\\\\","native_build":false,"dependencies":["path_provider_linux"]}],"windows":[{"name":"path_provider_windows","path":"C:\\\\Users\\\\iqbal\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\path_provider_windows-2.2.1\\\\","native_build":false,"dependencies":[]},{"name":"shared_preferences_windows","path":"C:\\\\Users\\\\iqbal\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\shared_preferences_windows-2.3.2\\\\","native_build":false,"dependencies":["path_provider_windows"]}],"web":[{"name":"shared_preferences_web","path":"C:\\\\Users\\\\iqbal\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\shared_preferences_web-2.3.0\\\\","dependencies":[]}]},"dependencyGraph":[{"name":"path_provider","dependencies":["path_provider_android","path_provider_foundation","path_provider_linux","path_provider_windows"]},{"name":"path_provider_android","dependencies":[]},{"name":"path_provider_foundation","dependencies":[]},{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_windows","dependencies":[]},{"name":"shared_preferences","dependencies":["shared_preferences_android","shared_preferences_foundation","shared_preferences_linux","shared_preferences_web","shared_preferences_windows"]},{"name":"shared_preferences_android","dependencies":[]},{"name":"shared_preferences_foundation","dependencies":[]},{"name":"shared_preferences_linux","dependencies":["path_provider_linux"]},{"name":"shared_preferences_web","dependencies":[]},{"name":"shared_preferences_windows","dependencies":["path_provider_windows"]},{"name":"sqflite","dependencies":[]}],"date_created":"2024-06-19 02:57:01.220553","version":"3.22.2"}
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"local_storage_cache_ios","path":"/Users/mathtech/development/dev/local-storage-cache/packages/local_storage_cache_ios/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_foundation","path":"/Users/mathtech/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.2/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false}],"android":[{"name":"local_storage_cache_android","path":"/Users/mathtech/development/dev/local-storage-cache/packages/local_storage_cache_android/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_android","path":"/Users/mathtech/.pub-cache/hosted/pub.dev/path_provider_android-2.2.19/","native_build":true,"dependencies":[],"dev_dependency":false}],"macos":[{"name":"local_storage_cache_macos","path":"/Users/mathtech/development/dev/local-storage-cache/packages/local_storage_cache_macos/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_foundation","path":"/Users/mathtech/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.2/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false}],"linux":[{"name":"local_storage_cache_linux","path":"/Users/mathtech/development/dev/local-storage-cache/packages/local_storage_cache_linux/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_linux","path":"/Users/mathtech/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/","native_build":false,"dependencies":[],"dev_dependency":false}],"windows":[{"name":"local_storage_cache_windows","path":"/Users/mathtech/development/dev/local-storage-cache/packages/local_storage_cache_windows/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_windows","path":"/Users/mathtech/.pub-cache/hosted/pub.dev/path_provider_windows-2.3.0/","native_build":false,"dependencies":[],"dev_dependency":false}],"web":[{"name":"local_storage_cache_web","path":"/Users/mathtech/development/dev/local-storage-cache/packages/local_storage_cache_web/","dependencies":[],"dev_dependency":false}]},"dependencyGraph":[{"name":"local_storage_cache","dependencies":["path_provider","local_storage_cache_android","local_storage_cache_ios","local_storage_cache_macos","local_storage_cache_windows","local_storage_cache_linux","local_storage_cache_web"]},{"name":"local_storage_cache_android","dependencies":[]},{"name":"local_storage_cache_ios","dependencies":[]},{"name":"local_storage_cache_linux","dependencies":[]},{"name":"local_storage_cache_macos","dependencies":[]},{"name":"local_storage_cache_web","dependencies":[]},{"name":"local_storage_cache_windows","dependencies":[]},{"name":"path_provider","dependencies":["path_provider_android","path_provider_foundation","path_provider_linux","path_provider_windows"]},{"name":"path_provider_android","dependencies":[]},{"name":"path_provider_foundation","dependencies":[]},{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_windows","dependencies":[]}],"date_created":"2026-01-30 05:44:15.943615","version":"3.32.8","swift_package_manager_enabled":{"ios":false,"macos":false}}
6 changes: 6 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# These owners will be the default owners for everything in
# the repo. Unless a later match takes precedence,
# review when someone opens a pull request.
# For more on how to customize the CODEOWNERS file - https://help.github.com/en/articles/about-code-owners

* @protheeuz
79 changes: 79 additions & 0 deletions .github/release-drafter.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
name-template: 'v$RESOLVED_VERSION'
tag-template: 'v$RESOLVED_VERSION'

categories:
- title: 'Breaking Changes'
labels:
- 'breaking'
- 'breaking-change'
- title: 'New Features'
labels:
- 'feature'
- 'feat'
- 'enhancement'
- title: 'Bug Fixes'
labels:
- 'fix'
- 'bugfix'
- 'bug'
- title: 'Performance Improvements'
labels:
- 'performance'
- 'perf'
- title: 'Documentation'
labels:
- 'documentation'
- 'docs'
- title: 'Dependency Updates'
labels:
- 'dependencies'
- 'deps'
- title: 'Maintenance'
labels:
- 'chore'
- 'refactor'
- 'test'
- 'ci'

change-template: '- $TITLE (#$NUMBER)'
change-title-escapes: '\<*_&'

version-resolver:
major:
labels:
- 'breaking'
- 'breaking-change'
minor:
labels:
- 'feature'
- 'feat'
- 'enhancement'
patch:
labels:
- 'fix'
- 'bugfix'
- 'bug'
- 'documentation'
- 'docs'
- 'chore'
- 'dependencies'
- 'deps'
default: patch

template: |
## Changes

$CHANGES

## Installation

Add this to your package's `pubspec.yaml` file:

```yaml
dependencies:
local_storage_cache: ^$RESOLVED_VERSION
```

## Contributors

$CONTRIBUTORS
69 changes: 69 additions & 0 deletions .github/workflows/code-coverage.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
name: Code Coverage

on: [push, pull_request]

env:
PUB_ENVIRONMENT: bot.github

jobs:
test_with_coverage:
name: Unit Tests with Coverage
runs-on: ubuntu-latest
timeout-minutes: 20

steps:
- name: Checkout Repository
uses: actions/checkout@v4

- name: Set Up Flutter
uses: subosito/flutter-action@v2
with:
channel: stable
cache: true

- name: Cache Pub Dependencies
uses: actions/cache@v4
with:
path: |
~/.pub-cache
.dart_tool
key: ${{ runner.os }}-pub-${{ hashFiles('**/pubspec.yaml') }}
restore-keys: |
${{ runner.os }}-pub-

- name: Install Melos
run: |
flutter pub global activate melos
echo "$HOME/.pub-cache/bin" >> $GITHUB_PATH

- name: Bootstrap Workspace
run: melos bootstrap

- name: Run Tests with Coverage
run: flutter test --coverage
working-directory: packages/local_storage_cache

- name: Verify Coverage File
run: |
if [ -f "packages/local_storage_cache/coverage/lcov.info" ]; then
echo "Coverage file found"
ls -lh packages/local_storage_cache/coverage/lcov.info
else
echo "Coverage file not found"
exit 1
fi

- name: Upload Coverage Report
uses: actions/upload-artifact@v4
with:
name: coverage-report
path: packages/local_storage_cache/coverage/lcov.info

- name: Upload Coverage to Codecov
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: packages/local_storage_cache/coverage/lcov.info
flags: unittests
name: codecov-flutter
fail_ci_if_error: true
91 changes: 91 additions & 0 deletions .github/workflows/code-integration.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
name: Code Integration

on:
push:
branches: [main, dev]
pull_request:

env:
PUB_ENVIRONMENT: bot.github

defaults:
run:
shell: bash

jobs:
unit_tests:
name: Unit Tests
runs-on: ubuntu-latest
timeout-minutes: 20

steps:
- name: Checkout Code
uses: actions/checkout@v4

- name: Set Up Flutter
uses: subosito/flutter-action@v2
with:
channel: stable
cache: true

- name: Cache Pub Dependencies
uses: actions/cache@v4
with:
path: |
~/.pub-cache
.dart_tool
key: ${{ runner.os }}-pub-${{ hashFiles('**/pubspec.yaml') }}
restore-keys: |
${{ runner.os }}-pub-

- name: Install Melos
run: |
flutter pub global activate melos
echo "$HOME/.pub-cache/bin" >> $GITHUB_PATH

- name: Bootstrap Workspace
run: melos bootstrap

- name: Run Unit Tests
run: melos test

platform_tests:
name: Platform Tests
runs-on: ${{ matrix.os }}
needs: unit_tests
timeout-minutes: 20
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]

steps:
- name: Checkout Code
uses: actions/checkout@v4

- name: Set Up Flutter
uses: subosito/flutter-action@v2
with:
channel: stable
cache: true

- name: Cache Pub Dependencies
uses: actions/cache@v4
with:
path: |
~/.pub-cache
.dart_tool
key: ${{ runner.os }}-pub-${{ hashFiles('**/pubspec.yaml') }}
restore-keys: |
${{ runner.os }}-pub-

- name: Install Melos
run: |
flutter pub global activate melos
echo "$HOME/.pub-cache/bin" >> $GITHUB_PATH

- name: Bootstrap Workspace
run: melos bootstrap

- name: Run Platform Tests
run: flutter test
working-directory: packages/local_storage_cache
52 changes: 52 additions & 0 deletions .github/workflows/code-quality.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
name: Code Quality

on: [push, pull_request]

defaults:
run:
shell: bash

env:
PUB_ENVIRONMENT: bot.github

jobs:
quality_checks:
name: Static Analysis and Formatting
runs-on: ubuntu-latest

steps:
- name: Checkout Code
uses: actions/checkout@v4

- name: Set Up Flutter
uses: subosito/flutter-action@v2
with:
channel: stable
cache: true

- name: Flutter Version Info
run: flutter doctor -v

- name: Cache Pub Dependencies
uses: actions/cache@v4
with:
path: |
~/.pub-cache
.dart_tool
key: ${{ runner.os }}-pub-${{ hashFiles('**/pubspec.yaml') }}
restore-keys: |
${{ runner.os }}-pub-

- name: Install Melos
run: |
flutter pub global activate melos
echo "$HOME/.pub-cache/bin" >> $GITHUB_PATH

- name: Bootstrap Workspace
run: melos bootstrap

- name: Run Static Analysis
run: melos analyze

- name: Check Code Formatting
run: melos exec -- "dart format --set-exit-if-changed ."
27 changes: 27 additions & 0 deletions .github/workflows/release-drafter.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: Release Drafter

on:
push:
branches:
- main
pull_request:
types: [opened, reopened, synchronize]

permissions:
contents: read

jobs:
update_release_draft:
name: Update Release Draft
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write

steps:
- name: Run Release Drafter
uses: release-drafter/release-drafter@v6
with:
config-name: release-drafter.yml
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Loading
Loading