From eacfca715c4403ed7edf3d3b2a1b91ca85580b4e Mon Sep 17 00:00:00 2001 From: Mo Tarbin Date: Tue, 14 Jul 2026 12:16:36 -0400 Subject: [PATCH] Integrate with Fastline, Create a release script --- .bundle/config | 2 + .gitignore | 20 +- Gemfile | 3 + Gemfile.lock | 233 ++++++++++++++ android/app/build.gradle | 4 +- fastlane/Appfile | 4 + fastlane/Fastfile | 66 ++++ fastlane/README.md | 53 ++++ ios/App/App.xcodeproj/project.pbxproj | 14 +- ios/App/Podfile.lock | 12 +- package-lock.json | 428 +++++++++++++++----------- package.json | 2 +- scripts/release.sh | 82 +++++ 13 files changed, 726 insertions(+), 197 deletions(-) create mode 100644 .bundle/config create mode 100644 Gemfile create mode 100644 Gemfile.lock create mode 100644 fastlane/Appfile create mode 100644 fastlane/Fastfile create mode 100644 fastlane/README.md create mode 100755 scripts/release.sh diff --git a/.bundle/config b/.bundle/config new file mode 100644 index 0000000..2369228 --- /dev/null +++ b/.bundle/config @@ -0,0 +1,2 @@ +--- +BUNDLE_PATH: "vendor/bundle" diff --git a/.gitignore b/.gitignore index 5f2e400..53e0970 100644 --- a/.gitignore +++ b/.gitignore @@ -24,4 +24,22 @@ dist-ssr *.sw? resources/android/**/* -resources/ios/**/* \ No newline at end of file +resources/ios/**/* + +# Secrets (pulled via scripts/pull-secrets.sh) +.env.production +android/app/google-services.json +android/app/release/*.jks +android/keystore.properties +android/local.properties +ios/App/App/GoogleService-Info.plist +ios/*.p8 + +# Release build outputs +build/android +build/ios +fastlane/report.xml +fastlane/Preview.html +fastlane/.env +fastlane/*.log +vendor/bundle \ No newline at end of file diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..7a118b4 --- /dev/null +++ b/Gemfile @@ -0,0 +1,3 @@ +source "https://rubygems.org" + +gem "fastlane" diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..8ca03a3 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,233 @@ +GEM + remote: https://rubygems.org/ + specs: + CFPropertyList (3.0.9) + abbrev (0.1.2) + addressable (2.9.0) + public_suffix (>= 2.0.2, < 8.0) + artifactory (3.0.17) + atomos (0.1.3) + aws-eventstream (1.3.2) + aws-partitions (1.1109.0) + aws-sdk-core (3.224.1) + aws-eventstream (~> 1, >= 1.3.0) + aws-partitions (~> 1, >= 1.992.0) + aws-sigv4 (~> 1.9) + base64 + jmespath (~> 1, >= 1.6.1) + logger + aws-sdk-kms (1.101.0) + aws-sdk-core (~> 3, >= 3.216.0) + aws-sigv4 (~> 1.5) + aws-sdk-s3 (1.188.0) + aws-sdk-core (~> 3, >= 3.224.1) + aws-sdk-kms (~> 1) + aws-sigv4 (~> 1.5) + aws-sigv4 (1.11.0) + aws-eventstream (~> 1, >= 1.0.2) + babosa (1.0.4) + base64 (0.2.0) + claide (1.1.0) + colored (1.2) + colored2 (3.1.2) + commander (4.6.0) + highline (~> 2.0.0) + csv (3.3.5) + declarative (0.0.20) + digest-crc (0.7.0) + rake (>= 12.0.0, < 14.0.0) + domain_name (0.5.20190701) + unf (>= 0.0.5, < 1.0.0) + dotenv (2.8.1) + emoji_regex (3.2.3) + excon (0.109.0) + faraday (1.10.6) + faraday-em_http (~> 1.0) + faraday-em_synchrony (~> 1.0) + faraday-excon (~> 1.1) + faraday-httpclient (~> 1.0) + faraday-multipart (~> 1.0) + faraday-net_http (~> 1.0) + faraday-net_http_persistent (~> 1.0) + faraday-patron (~> 1.0) + faraday-rack (~> 1.0) + faraday-retry (~> 1.0) + ruby2_keywords (>= 0.0.4) + faraday-cookie_jar (0.0.8) + faraday (>= 0.8.0) + http-cookie (>= 1.0.0) + faraday-em_http (1.0.0) + faraday-em_synchrony (1.0.1) + faraday-excon (1.1.0) + faraday-httpclient (1.0.1) + faraday-multipart (1.2.0) + multipart-post (~> 2.0) + faraday-net_http (1.0.2) + faraday-net_http_persistent (1.2.0) + faraday-patron (1.0.0) + faraday-rack (1.0.0) + faraday-retry (1.0.4) + faraday_middleware (1.2.1) + faraday (~> 1.0) + fastimage (2.4.1) + fastlane (2.230.0) + CFPropertyList (>= 2.3, < 4.0.0) + abbrev (~> 0.1.2) + addressable (>= 2.8, < 3.0.0) + artifactory (~> 3.0) + aws-sdk-s3 (~> 1.0) + babosa (>= 1.0.3, < 2.0.0) + base64 (~> 0.2.0) + bundler (>= 1.12.0, < 3.0.0) + colored (~> 1.2) + commander (~> 4.6) + csv (~> 3.3) + dotenv (>= 2.1.1, < 3.0.0) + emoji_regex (>= 0.1, < 4.0) + excon (>= 0.71.0, < 1.0.0) + faraday (~> 1.0) + faraday-cookie_jar (~> 0.0.6) + faraday_middleware (~> 1.0) + fastimage (>= 2.1.0, < 3.0.0) + fastlane-sirp (>= 1.0.0) + gh_inspector (>= 1.1.2, < 2.0.0) + google-apis-androidpublisher_v3 (~> 0.3) + google-apis-playcustomapp_v1 (~> 0.1) + google-cloud-env (>= 1.6.0, < 2.0.0) + google-cloud-storage (~> 1.31) + highline (~> 2.0) + http-cookie (~> 1.0.5) + json (< 3.0.0) + jwt (>= 2.1.0, < 3) + logger (>= 1.6, < 2.0) + mini_magick (>= 4.9.4, < 5.0.0) + multipart-post (>= 2.0.0, < 3.0.0) + mutex_m (~> 0.3.0) + naturally (~> 2.2) + nkf (~> 0.2.0) + optparse (>= 0.1.1, < 1.0.0) + plist (>= 3.1.0, < 4.0.0) + rubyzip (>= 2.0.0, < 3.0.0) + security (= 0.1.5) + simctl (~> 1.6.3) + terminal-notifier (>= 2.0.0, < 3.0.0) + terminal-table (~> 3) + tty-screen (>= 0.6.3, < 1.0.0) + tty-spinner (>= 0.8.0, < 1.0.0) + word_wrap (~> 1.0.0) + xcodeproj (>= 1.13.0, < 2.0.0) + xcpretty (~> 0.4.1) + xcpretty-travis-formatter (>= 0.0.3, < 2.0.0) + fastlane-sirp (1.1.0) + gh_inspector (1.1.3) + google-apis-androidpublisher_v3 (0.54.0) + google-apis-core (>= 0.11.0, < 2.a) + google-apis-core (0.11.3) + addressable (~> 2.5, >= 2.5.1) + googleauth (>= 0.16.2, < 2.a) + httpclient (>= 2.8.1, < 3.a) + mini_mime (~> 1.0) + representable (~> 3.0) + retriable (>= 2.0, < 4.a) + rexml + google-apis-iamcredentials_v1 (0.17.0) + google-apis-core (>= 0.11.0, < 2.a) + google-apis-playcustomapp_v1 (0.13.0) + google-apis-core (>= 0.11.0, < 2.a) + google-apis-storage_v1 (0.29.0) + google-apis-core (>= 0.11.0, < 2.a) + google-cloud-core (1.6.1) + google-cloud-env (>= 1.0, < 3.a) + google-cloud-errors (~> 1.0) + google-cloud-env (1.6.0) + faraday (>= 0.17.3, < 3.0) + google-cloud-errors (1.3.1) + google-cloud-storage (1.45.0) + addressable (~> 2.8) + digest-crc (~> 0.4) + google-apis-iamcredentials_v1 (~> 0.1) + google-apis-storage_v1 (~> 0.29.0) + google-cloud-core (~> 1.6) + googleauth (>= 0.16.2, < 2.a) + mini_mime (~> 1.0) + googleauth (1.8.1) + faraday (>= 0.17.3, < 3.a) + jwt (>= 1.4, < 3.0) + multi_json (~> 1.11) + os (>= 0.9, < 2.0) + signet (>= 0.16, < 2.a) + highline (2.0.3) + http-cookie (1.0.8) + domain_name (~> 0.5) + httpclient (2.9.0) + mutex_m + jmespath (1.6.2) + json (2.7.6) + jwt (2.10.3) + base64 + logger (1.7.0) + mini_magick (4.13.2) + mini_mime (1.1.5) + multi_json (1.15.0) + multipart-post (2.4.1) + mutex_m (0.3.0) + nanaimo (0.4.0) + naturally (2.3.0) + nkf (0.2.0) + optparse (0.8.1) + os (1.1.4) + plist (3.7.2) + public_suffix (5.1.1) + rake (13.4.2) + representable (3.2.0) + declarative (< 0.1.0) + trailblazer-option (>= 0.1.1, < 0.2.0) + uber (< 0.2.0) + retriable (3.8.0) + rexml (3.4.4) + rouge (3.28.0) + ruby2_keywords (0.0.5) + rubyzip (2.4.1) + security (0.1.5) + signet (0.18.0) + addressable (~> 2.8) + faraday (>= 0.17.5, < 3.a) + jwt (>= 1.5, < 3.0) + multi_json (~> 1.10) + simctl (1.6.10) + CFPropertyList + naturally + terminal-notifier (2.0.0) + terminal-table (3.0.2) + unicode-display_width (>= 1.1.1, < 3) + trailblazer-option (0.1.2) + tty-cursor (0.7.1) + tty-screen (0.8.2) + tty-spinner (0.9.3) + tty-cursor (~> 0.7) + uber (0.1.0) + unf (0.2.0) + unicode-display_width (2.6.0) + word_wrap (1.0.0) + xcodeproj (1.28.1) + CFPropertyList (>= 2.3.3, < 4.0) + atomos (~> 0.1.3) + base64 + claide (>= 1.0.2, < 2.0) + colored2 (~> 3.1) + nanaimo (~> 0.4.0) + nkf + rexml (>= 3.3.6, < 4.0) + xcpretty (0.4.1) + rouge (~> 3.28.0) + xcpretty-travis-formatter (1.0.1) + xcpretty (~> 0.2, >= 0.0.7) + +PLATFORMS + ruby + +DEPENDENCIES + fastlane + +BUNDLED WITH + 1.17.2 diff --git a/android/app/build.gradle b/android/app/build.gradle index 7a9e51d..7fa9260 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -13,8 +13,8 @@ android { applicationId "com.donetick.app" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 28 - versionName "1.2.7" + versionCode 31 + versionName "1.2.10" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" aaptOptions { // Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps. diff --git a/fastlane/Appfile b/fastlane/Appfile new file mode 100644 index 0000000..b756cc1 --- /dev/null +++ b/fastlane/Appfile @@ -0,0 +1,4 @@ +app_identifier("com.donetick.app") +team_id("6UJJ78R3BS") + +apple_id(ENV["APPLE_ID"]) if ENV["APPLE_ID"] diff --git a/fastlane/Fastfile b/fastlane/Fastfile new file mode 100644 index 0000000..40781d0 --- /dev/null +++ b/fastlane/Fastfile @@ -0,0 +1,66 @@ +require "shellwords" + +default_platform(:ios) + +IOS_KEY_PATH = File.expand_path("../ios/AuthKey_84F695CDQ3.p8") +IOS_OUTPUT_DIR = File.expand_path("../build/ios") +ANDROID_PROJECT_DIR = File.expand_path("../android") + +platform :ios do + desc "Build a signed, App Store-ready .ipa" + lane :release do + Dir.chdir(File.expand_path("../ios/App")) do + Bundler.with_clean_env do + sh("pod install --repo-update") + end + end + + build_app( + workspace: "ios/App/App.xcworkspace", + scheme: "App", + export_method: "app-store", + output_directory: IOS_OUTPUT_DIR, + output_name: "Donetick.ipa", + export_options: { + signingStyle: "manual", + provisioningProfiles: { + "com.donetick.app" => "Donetick App Store(fastline)", + }, + }, + ) + + UI.success("Signed .ipa at #{IOS_OUTPUT_DIR}/Donetick.ipa") + end +end + +platform :android do + desc "Build a signed release .aab" + lane :release do + keystore_properties = File.join(ANDROID_PROJECT_DIR, "keystore.properties") + UI.user_error!("Missing #{keystore_properties} — run scripts/pull-secrets.sh first") unless File.exist?(keystore_properties) + + gradle( + task: "bundle", + build_type: "Release", + project_dir: "#{ANDROID_PROJECT_DIR}/", + ) + + aab_path = lane_context[SharedValues::GRADLE_AAB_OUTPUT_PATH] + UI.success("Signed .aab at #{aab_path}") + end + + desc "Build a signed release .apk (for sideloading/testing)" + lane :apk do + keystore_properties = File.join(ANDROID_PROJECT_DIR, "keystore.properties") + UI.user_error!("Missing #{keystore_properties} — run scripts/pull-secrets.sh first") unless File.exist?(keystore_properties) + + gradle( + task: "assemble", + build_type: "Release", + project_dir: "#{ANDROID_PROJECT_DIR}/", + ) + + apk_path = lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH] + UI.success("Signed .apk at #{apk_path}") + end +end diff --git a/fastlane/README.md b/fastlane/README.md new file mode 100644 index 0000000..6920af8 --- /dev/null +++ b/fastlane/README.md @@ -0,0 +1,53 @@ +fastlane documentation +---- + +# Installation + +Make sure you have the latest version of the Xcode command line tools installed: + +```sh +xcode-select --install +``` + +For _fastlane_ installation instructions, see [Installing _fastlane_](https://docs.fastlane.tools/#installing-fastlane) + +# Available Actions + +## iOS + +### ios release + +```sh +[bundle exec] fastlane ios release +``` + +Build a signed, App Store-ready .ipa + +---- + + +## Android + +### android release + +```sh +[bundle exec] fastlane android release +``` + +Build a signed release .aab + +### android apk + +```sh +[bundle exec] fastlane android apk +``` + +Build a signed release .apk (for sideloading/testing) + +---- + +This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run. + +More information about _fastlane_ can be found on [fastlane.tools](https://fastlane.tools). + +The documentation of _fastlane_ can be found on [docs.fastlane.tools](https://docs.fastlane.tools). diff --git a/ios/App/App.xcodeproj/project.pbxproj b/ios/App/App.xcodeproj/project.pbxproj index 0c09359..d096991 100644 --- a/ios/App/App.xcodeproj/project.pbxproj +++ b/ios/App/App.xcodeproj/project.pbxproj @@ -274,7 +274,6 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; @@ -331,7 +330,6 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; @@ -360,13 +358,13 @@ CODE_SIGN_ALLOW_ENTITLEMENTS_MODIFICATION = YES; CODE_SIGN_ENTITLEMENTS = App/App.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 28; + CURRENT_PROJECT_VERSION = 31; DEVELOPMENT_TEAM = 6UJJ78R3BS; INFOPLIST_FILE = App/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MARKETING_VERSION = 1.2.10; PRODUCT_BUNDLE_IDENTIFIER = com.donetick.app; - MARKETING_VERSION = 1.2.7; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -380,13 +378,15 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ALLOW_ENTITLEMENTS_MODIFICATION = YES; CODE_SIGN_ENTITLEMENTS = App/App.entitlements; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 28; + CODE_SIGN_IDENTITY = "Apple Distribution"; + CODE_SIGN_STYLE = Manual; + PROVISIONING_PROFILE_SPECIFIER = "Donetick App Store(fastline)"; + CURRENT_PROJECT_VERSION = 31; DEVELOPMENT_TEAM = 6UJJ78R3BS; INFOPLIST_FILE = App/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 1.2.7; + MARKETING_VERSION = 1.2.10; PRODUCT_BUNDLE_IDENTIFIER = com.donetick.app; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_ACTIVE_COMPILATION_CONDITIONS = ""; diff --git a/ios/App/Podfile.lock b/ios/App/Podfile.lock index 7ef206d..5f6f755 100644 --- a/ios/App/Podfile.lock +++ b/ios/App/Podfile.lock @@ -31,7 +31,7 @@ PODS: - Capacitor - CapacitorNetwork (8.0.1): - Capacitor - - CapacitorPluginSafeArea (5.0.0): + - CapacitorPluginSafeArea (5.0.1): - Capacitor - CapacitorPreferences (8.0.1): - Capacitor @@ -41,9 +41,9 @@ PODS: - Capacitor - CapgoCapacitorDocumentScanner (8.4.0): - Capacitor - - CapgoCapacitorNfc (8.1.7): + - CapgoCapacitorNfc (8.2.2): - Capacitor - - CapgoCapacitorSocialLogin (8.3.34): + - CapgoCapacitorSocialLogin (8.3.36): - Alamofire (~> 5.10.2) - Capacitor - FBSDKCoreKit (~> 18.0) @@ -249,13 +249,13 @@ SPEC CHECKSUMS: CapacitorLocalLlm: a05516151a02923a9e7dae9949d3817e85e321f0 CapacitorLocalNotifications: 2615aa008f608b95d3921a778ee1988abf1e6148 CapacitorNetwork: 8812ce60d11fb63d8f2e4ba51a49b2e59892ebe2 - CapacitorPluginSafeArea: 9d0682951c011bf0b36e513a89103c5fbff7ac49 + CapacitorPluginSafeArea: 874619c00586248f1694210e72038123d422c2d9 CapacitorPreferences: cca2021f386efb75947c850334447d9ff22b14f1 CapacitorPushNotifications: ec08d589c226a2c0db7c032ec1bf5b044ec85f8e CapacitorStatusBar: 01d5763b4ed720de5ce2edbc938de6a98f4c8f32 CapgoCapacitorDocumentScanner: 7ad9e8ed9c054d551bfc948660d995b9545723d8 - CapgoCapacitorNfc: 5bf5a951ca231d7c40f1ac20549d2abcd1b8f939 - CapgoCapacitorSocialLogin: b0e67630b9d9b5f14fff774c825c1b8fa85eff7b + CapgoCapacitorNfc: 8ea158143c441e1cf6d231a971e375511558d027 + CapgoCapacitorSocialLogin: adffda2bec52a765bdaebf3fa9a6083bd9341d60 FBAEMKit: 64088ff0380f50e4a56e2ee07d984f7f1aef7595 FBSDKCoreKit: 8390ea3a8fac186f444275f31d7512e760b47cba FBSDKCoreKit_Basics: 3a0005c78b355388bf2df5c6dbe6381b77ea4be3 diff --git a/package-lock.json b/package-lock.json index bc249e6..645756d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,29 +1,29 @@ { "name": "donetick", - "version": "1.2.3", + "version": "1.2.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "donetick", - "version": "1.2.3", + "version": "1.2.8", "dependencies": { - "@capacitor-community/sqlite": "^7.0.0", - "@capacitor/android": "^7.0.0", - "@capacitor/app": "^7.0.0", - "@capacitor/browser": "^7.0.2", - "@capacitor/core": "^7.0.0", - "@capacitor/device": "^7.0.0", - "@capacitor/ios": "^7.0.0", + "@capacitor-community/sqlite": "^8.0.0", + "@capacitor/android": "^8.0.0", + "@capacitor/app": "^8.0.0", + "@capacitor/browser": "^8.0.0", + "@capacitor/core": "^8.0.0", + "@capacitor/device": "^8.0.0", + "@capacitor/ios": "^8.0.0", "@capacitor/local-llm": "^1.0.0", - "@capacitor/local-notifications": "^7.0.0", - "@capacitor/network": "^7.0.1", - "@capacitor/preferences": "^7.0.0", - "@capacitor/push-notifications": "^7.0.0", - "@capacitor/status-bar": "^7.0.0", + "@capacitor/local-notifications": "^8.0.0", + "@capacitor/network": "^8.0.0", + "@capacitor/preferences": "^8.0.0", + "@capacitor/push-notifications": "^8.0.0", + "@capacitor/status-bar": "^8.0.0", "@capgo/capacitor-document-scanner": "^8.4.0", - "@capgo/capacitor-nfc": "^7.2.0", - "@capgo/capacitor-social-login": "^7.5.3", + "@capgo/capacitor-nfc": "^8.0.0", + "@capgo/capacitor-social-login": "^8.0.0", "@dnd-kit/core": "^6.3.1", "@dnd-kit/sortable": "^10.0.0", "@dnd-kit/utilities": "^3.2.2", @@ -36,14 +36,14 @@ "@mui/joy": "^5.0.0-beta.20", "@mui/material": "^5.15.2", "@openreplay/tracker": "^14.0.4", - "@revenuecat/purchases-capacitor": "^11.1.0", - "@revenuecat/purchases-capacitor-ui": "^11.1.0", + "@revenuecat/purchases-capacitor": "^12.0.0", + "@revenuecat/purchases-capacitor-ui": "^12.0.0", "@swc/core": "^1.12.5", "@tanstack/react-query": "^5.17.0", "aos": "^2.3.4", "browser-image-compression": "^2.0.2", "caniuse-lite": "^1.0.30001769", - "capacitor-plugin-safe-area": "^4.0.0", + "capacitor-plugin-safe-area": "^5.0.0", "chrono-node": "^2.7.7", "dotenv": "^16.4.5", "esm": "^3.2.25", @@ -74,7 +74,7 @@ }, "devDependencies": { "@capacitor/assets": "^3.0.5", - "@capacitor/cli": "^7.0.0", + "@capacitor/cli": "^8.0.0", "@tanstack/eslint-plugin-query": "^5.14.6", "@types/react": "^18.2.43", "@types/react-dom": "^18.2.17", @@ -98,6 +98,7 @@ "prettier": "^3.1.1", "prettier-plugin-tailwindcss": "^0.5.10", "tailwindcss": "^3.4.0", + "typescript": "^5.8.0", "vite": "^5.2.13" }, "engines": { @@ -129,7 +130,7 @@ }, "node_modules/@antfu/utils": { "version": "0.7.10", - "dev": true, + "devOptional": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/antfu" @@ -1460,11 +1461,13 @@ }, "node_modules/@canvas/image-data": { "version": "1.0.0", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@capacitor-community/sqlite": { - "version": "7.0.1", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@capacitor-community/sqlite/-/sqlite-8.1.0.tgz", + "integrity": "sha512-yhKZDAVPDPcM3QE6UGB3LXyV25a6Rve1SjZ1aUpTE0E2isnYTVM0PG9+JOI241f+NdsHzPTE7ESJiYSqKsKnuA==", "license": "MIT", "dependencies": { "jeep-sqlite": "^2.7.2" @@ -1473,7 +1476,7 @@ "node": ">=16.0.0" }, "peerDependencies": { - "@capacitor/core": ">=7.0.0" + "@capacitor/core": ">=8.0.0" } }, "node_modules/@capacitor-community/sqlite/node_modules/@rollup/rollup-darwin-arm64": { @@ -1627,17 +1630,21 @@ "license": "MIT" }, "node_modules/@capacitor/android": { - "version": "7.4.3", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@capacitor/android/-/android-8.4.1.tgz", + "integrity": "sha512-igtDCJ7QQn0P2qHFD9p4KXaa6V1b2PRNt+MxjVwtjTm/BJvqmiazOJq6rPjwFSZnfHm6iFoZk8TfzHd44pyBGw==", "license": "MIT", "peerDependencies": { - "@capacitor/core": "^7.4.0" + "@capacitor/core": "^8.4.0" } }, "node_modules/@capacitor/app": { - "version": "7.0.2", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@capacitor/app/-/app-8.1.0.tgz", + "integrity": "sha512-MlmttTOWHDedr/G4SrhNRxsXMqY+R75S4MM4eIgzsgCzOYhb/MpCkA5Q3nuOCfL1oHm26xjUzqZ5aupbOwdfYg==", "license": "MIT", "peerDependencies": { - "@capacitor/core": ">=7.0.0" + "@capacitor/core": ">=8.0.0" } }, "node_modules/@capacitor/assets": { @@ -1874,14 +1881,18 @@ } }, "node_modules/@capacitor/browser": { - "version": "7.0.2", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@capacitor/browser/-/browser-8.0.3.tgz", + "integrity": "sha512-WJWPHEPbweiFoHYmVlCbZf5yrqJ2Rchx2Xvbmd+3Lf+Zkpq3nXBThThY2CF69lYEg1NINGF9BcHThIOEU1gZlQ==", "license": "MIT", "peerDependencies": { - "@capacitor/core": ">=7.0.0" + "@capacitor/core": ">=8.0.0" } }, "node_modules/@capacitor/cli": { - "version": "7.4.3", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@capacitor/cli/-/cli-8.4.1.tgz", + "integrity": "sha512-t7F2s7fFHCq113xgrggrmK6ctV0/8E5YfLNVLfPHp4GCTDO+tly9fZvWPf2/sOI8lMm18dLT43qbXLRTz/OZgw==", "dev": true, "license": "MIT", "dependencies": { @@ -1893,13 +1904,13 @@ "env-paths": "^2.2.0", "fs-extra": "^11.2.0", "kleur": "^4.1.5", - "native-run": "^2.0.1", + "native-run": "^2.0.3", "open": "^8.4.0", "plist": "^3.1.0", "prompts": "^2.4.2", "rimraf": "^6.0.1", "semver": "^7.6.3", - "tar": "^6.1.11", + "tar": "^7.5.3", "tslib": "^2.8.1", "xml2js": "^0.6.2" }, @@ -1908,7 +1919,17 @@ "capacitor": "bin/capacitor" }, "engines": { - "node": ">=20.0.0" + "node": ">=22.0.0" + } + }, + "node_modules/@capacitor/cli/node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" } }, "node_modules/@capacitor/cli/node_modules/commander": { @@ -1948,11 +1969,41 @@ "node": ">=14.14" } }, + "node_modules/@capacitor/cli/node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/@capacitor/cli/node_modules/ms": { "version": "2.1.3", "dev": true, "license": "MIT" }, + "node_modules/@capacitor/cli/node_modules/tar": { + "version": "7.5.20", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.20.tgz", + "integrity": "sha512-9FcyK4PA6+WbzlTM9WhQm6vB5W7cP7dUiPsv1g7YDwEQnQ1CGpK3MGlKk/ITVWMk05kHZuBhmVhiv8LZoy/PFQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@capacitor/cli/node_modules/tslib": { "version": "2.8.1", "dev": true, @@ -1978,25 +2029,41 @@ "node": ">=4.0" } }, + "node_modules/@capacitor/cli/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, "node_modules/@capacitor/core": { - "version": "7.4.3", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-8.4.1.tgz", + "integrity": "sha512-xqhOGLbTAYeOWK+IDUNSjQJAPapQjRHrIcgk9PYp52or9zFTaaMko31uNi16N6W+CRJ8VrRram6fOYILkBG2Hg==", "license": "MIT", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/@capacitor/device": { - "version": "7.0.2", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@capacitor/device/-/device-8.0.2.tgz", + "integrity": "sha512-fIqSXnG0s6bz5A/0xFgSXDkbU+Xl65ti80LhucNvLI4kGhJzcNn6SwWVwpXN9SJTOFWXblXknHNppheP8X1frQ==", "license": "MIT", "peerDependencies": { - "@capacitor/core": ">=7.0.0" + "@capacitor/core": ">=8.0.0" } }, "node_modules/@capacitor/ios": { - "version": "7.4.3", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@capacitor/ios/-/ios-8.4.1.tgz", + "integrity": "sha512-EgcAk7NYheHMTyP3CUrA65qKs4D2UEAKgw44HI6Uk3dTw6KjLQkdLOQWvbeRncHaZ2gklfOojUoc5DlSw2lhYg==", "license": "MIT", "peerDependencies": { - "@capacitor/core": "^7.4.0" + "@capacitor/core": "^8.4.0" } }, "node_modules/@capacitor/local-llm": { @@ -2007,38 +2074,48 @@ } }, "node_modules/@capacitor/local-notifications": { - "version": "7.0.2", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@capacitor/local-notifications/-/local-notifications-8.2.0.tgz", + "integrity": "sha512-fvLY0w2w4MiX+DD4+Wv4DOwOLdzKZsMDwAcRv/Juudd+QbKbn69s6cM3xVqPwAiDqfnqsY4/S8xtQD6M73wY2A==", "license": "MIT", "peerDependencies": { - "@capacitor/core": ">=7.0.0" + "@capacitor/core": ">=8.0.0" } }, "node_modules/@capacitor/network": { - "version": "7.0.2", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@capacitor/network/-/network-8.0.1.tgz", + "integrity": "sha512-9xK/FHFmzKGanB6BdoSZOzXk8vF0OFVQSQ4PAsIrzAzLuXHryO317qy8dcHVpgxYeuZq2noI0My9z1DvVDi/9w==", "license": "MIT", "peerDependencies": { - "@capacitor/core": ">=7.0.0" + "@capacitor/core": ">=8.0.0" } }, "node_modules/@capacitor/preferences": { - "version": "7.0.2", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@capacitor/preferences/-/preferences-8.0.1.tgz", + "integrity": "sha512-T6no3ebi79XJCk91U3Jp/liJUwgBdvHR+s6vhvPkPxSuch7z3zx5Rv1bdWM6sWruNx+pViuEGqZvbfCdyBvcHQ==", "license": "MIT", "peerDependencies": { - "@capacitor/core": ">=7.0.0" + "@capacitor/core": ">=8.0.0" } }, "node_modules/@capacitor/push-notifications": { - "version": "7.0.2", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@capacitor/push-notifications/-/push-notifications-8.1.1.tgz", + "integrity": "sha512-WqzjPKIbYbARMN+GC0XMAJcxJpUUzqgzS/Ny8RODLrro38pQhm3GXYwX2Mwd+LZlLY39rGImkCkrKyQSNfuikA==", "license": "MIT", "peerDependencies": { - "@capacitor/core": ">=7.0.0" + "@capacitor/core": ">=8.0.0" } }, "node_modules/@capacitor/status-bar": { - "version": "7.0.2", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@capacitor/status-bar/-/status-bar-8.0.2.tgz", + "integrity": "sha512-WXs8YB8B9eEaPZz+bcdY6t2nForF1FLoj/JU0Dl9RRgQnddnS98FEEyDooQhaY7wivr000j4+SC1FyeJkrFO7A==", "license": "MIT", "peerDependencies": { - "@capacitor/core": ">=7.0.0" + "@capacitor/core": ">=8.0.0" } }, "node_modules/@capgo/capacitor-document-scanner": { @@ -2049,21 +2126,32 @@ } }, "node_modules/@capgo/capacitor-nfc": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@capgo/capacitor-nfc/-/capacitor-nfc-7.2.0.tgz", - "integrity": "sha512-lYMlogAlUG3j1HmieOdFan4SNOnTbTvZ7BMYQmyhnfU9810aip9oPh6CYVXO/2ecZXW03ATTmSKtr4Ci8DpW2Q==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@capgo/capacitor-nfc/-/capacitor-nfc-8.2.2.tgz", + "integrity": "sha512-plz0eYXwEcq1gKnImqsa/s0hV+RZ5N11lWcEqgcfyH8AT6u6QDphNLsehVkgLHnsR+QNrHlwXvN6IbIksFYt+Q==", "license": "MPL-2.0", "peerDependencies": { - "@capacitor/core": ">=7.0.0" + "@capacitor/core": ">=8.0.0" } }, "node_modules/@capgo/capacitor-social-login": { - "version": "7.11.2", - "license": "MIT", + "version": "8.3.36", + "resolved": "https://registry.npmjs.org/@capgo/capacitor-social-login/-/capacitor-social-login-8.3.36.tgz", + "integrity": "sha512-Y4HYjEJablzbHHwPBrbC2UvHVPsR0bAyCAqBzVBoUEOf0UFHAHyTP3gD9JUTKP/iERU8I+6IA2RWtLqDePCNuA==", + "license": "MPL-2.0", + "dependencies": { + "tslib": "^2.8.1" + }, "peerDependencies": { - "@capacitor/core": ">=7.0.0" + "@capacitor/core": ">=8.0.0" } }, + "node_modules/@capgo/capacitor-social-login/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "dev": true, @@ -2256,7 +2344,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2273,7 +2360,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2290,7 +2376,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2307,7 +2392,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2324,7 +2408,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2341,7 +2424,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2358,7 +2440,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2375,7 +2456,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2392,7 +2472,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2409,7 +2488,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2426,7 +2504,6 @@ "cpu": [ "loong64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2443,7 +2520,6 @@ "cpu": [ "mips64el" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2460,7 +2536,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2477,7 +2552,6 @@ "cpu": [ "riscv64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2494,7 +2568,6 @@ "cpu": [ "s390x" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2511,7 +2584,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2528,7 +2600,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2545,7 +2616,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2562,7 +2632,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2579,7 +2648,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2596,7 +2664,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2613,7 +2680,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3039,6 +3105,19 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@jcesarmobile/capacitor-ocr": { "version": "0.3.0", "license": "MIT", @@ -4270,25 +4349,29 @@ } }, "node_modules/@revenuecat/purchases-capacitor": { - "version": "11.1.2", + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@revenuecat/purchases-capacitor/-/purchases-capacitor-12.3.2.tgz", + "integrity": "sha512-x6/NhQIxQyc7DQ3TsuvbbthNWNaibMRCvW7M6z/MrU8kr8BmZLI2rEaUQqTef3UtGwT1CvctqaELL7XrN7rh5g==", "license": "MIT", "dependencies": { - "@revenuecat/purchases-typescript-internal-esm": "17.0.0" + "@revenuecat/purchases-typescript-internal-esm": "17.55.1" }, "peerDependencies": { - "@capacitor/core": ">=7.0.0" + "@capacitor/core": ">=8.0.0" } }, "node_modules/@revenuecat/purchases-capacitor-ui": { - "version": "11.1.2", + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/@revenuecat/purchases-capacitor-ui/-/purchases-capacitor-ui-12.3.2.tgz", + "integrity": "sha512-6TSd+C6hho4m1SPJWJES8IuWyl9yKEDsG3aCk1PWm/g0wOEC2+MjI1yDaezGCtd78GAiw8ouUtDqje62qWjuUA==", "license": "MIT", "dependencies": { - "@capacitor/core": "^7.0.0", + "@capacitor/core": "^8.0.0", "@revenuecat/purchases-capacitor": "^10.2.4", - "@revenuecat/purchases-typescript-internal-esm": "17.0.0" + "@revenuecat/purchases-typescript-internal-esm": "17.55.1" }, "peerDependencies": { - "@capacitor/core": "^7.0.0" + "@capacitor/core": ">=8.0.0" } }, "node_modules/@revenuecat/purchases-capacitor-ui/node_modules/@revenuecat/purchases-capacitor": { @@ -4306,7 +4389,9 @@ "license": "MIT" }, "node_modules/@revenuecat/purchases-typescript-internal-esm": { - "version": "17.0.0", + "version": "17.55.1", + "resolved": "https://registry.npmjs.org/@revenuecat/purchases-typescript-internal-esm/-/purchases-typescript-internal-esm-17.55.1.tgz", + "integrity": "sha512-dcxmtYmxkWi26VCwM+9+AJjyQMNhshpC4yXal2COpGt4T80dIIgVzWyRr961Pw8D+OpJIgb8x6gU1okYAM4dHg==", "license": "MIT" }, "node_modules/@rolldown/pluginutils": { @@ -4393,7 +4478,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4407,7 +4491,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4419,7 +4502,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4433,7 +4515,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4447,7 +4528,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4461,7 +4541,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4475,7 +4554,6 @@ "cpu": [ "arm" ], - "dev": true, "libc": [ "glibc" ], @@ -4492,7 +4570,6 @@ "cpu": [ "arm" ], - "dev": true, "libc": [ "musl" ], @@ -4509,7 +4586,6 @@ "cpu": [ "arm64" ], - "dev": true, "libc": [ "glibc" ], @@ -4526,7 +4602,6 @@ "cpu": [ "arm64" ], - "dev": true, "libc": [ "musl" ], @@ -4543,7 +4618,6 @@ "cpu": [ "loong64" ], - "dev": true, "libc": [ "glibc" ], @@ -4560,7 +4634,6 @@ "cpu": [ "ppc64" ], - "dev": true, "libc": [ "glibc" ], @@ -4577,7 +4650,6 @@ "cpu": [ "riscv64" ], - "dev": true, "libc": [ "glibc" ], @@ -4594,7 +4666,6 @@ "cpu": [ "riscv64" ], - "dev": true, "libc": [ "musl" ], @@ -4611,7 +4682,6 @@ "cpu": [ "s390x" ], - "dev": true, "libc": [ "glibc" ], @@ -4628,7 +4698,6 @@ "cpu": [ "x64" ], - "dev": true, "libc": [ "glibc" ], @@ -4645,7 +4714,6 @@ "cpu": [ "x64" ], - "dev": true, "libc": [ "musl" ], @@ -4662,7 +4730,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4676,7 +4743,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4690,7 +4756,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4704,7 +4769,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -5186,7 +5250,7 @@ }, "node_modules/@types/node": { "version": "24.3.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "undici-types": "~7.10.0" @@ -5207,7 +5271,6 @@ }, "node_modules/@types/react": { "version": "18.3.24", - "dev": true, "license": "MIT", "dependencies": { "@types/prop-types": "*", @@ -5392,7 +5455,7 @@ }, "node_modules/@vite-pwa/assets-generator": { "version": "0.2.6", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "cac": "^6.7.14", @@ -6234,7 +6297,7 @@ }, "node_modules/b4a": { "version": "1.6.7", - "dev": true, + "devOptional": true, "license": "Apache-2.0" }, "node_modules/babel-plugin-macros": { @@ -6296,7 +6359,7 @@ }, "node_modules/base64-js": { "version": "1.5.1", - "dev": true, + "devOptional": true, "funding": [ { "type": "github", @@ -6342,7 +6405,7 @@ }, "node_modules/bl": { "version": "4.1.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "buffer": "^5.5.0", @@ -6352,7 +6415,7 @@ }, "node_modules/bl/node_modules/readable-stream": { "version": "3.6.2", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -6452,7 +6515,7 @@ }, "node_modules/buffer": { "version": "5.7.1", - "dev": true, + "devOptional": true, "funding": [ { "type": "github", @@ -6487,7 +6550,7 @@ }, "node_modules/cac": { "version": "6.7.14", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -6591,10 +6654,12 @@ "license": "CC-BY-4.0" }, "node_modules/capacitor-plugin-safe-area": { - "version": "4.0.0", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/capacitor-plugin-safe-area/-/capacitor-plugin-safe-area-5.0.1.tgz", + "integrity": "sha512-DLSCFpvSkYJk4FaVHD0/xbRjdVN7GsBbdoYWmHr7h/LvuO4Q8VW+1ftzMzH3ScIMIydy2DuRYrn+GORnlESBxw==", "license": "MIT", "peerDependencies": { - "@capacitor/core": ">=7.0.0" + "@capacitor/core": ">=8.0.0" } }, "node_modules/capacitor-set-version": { @@ -6749,7 +6814,7 @@ }, "node_modules/color": { "version": "4.2.3", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1", @@ -6775,7 +6840,7 @@ }, "node_modules/color-string": { "version": "1.9.1", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-name": "^1.0.0", @@ -6784,7 +6849,7 @@ }, "node_modules/colorette": { "version": "2.0.20", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/commander": { @@ -6810,7 +6875,7 @@ }, "node_modules/consola": { "version": "3.4.2", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": "^14.18.0 || >=16.10.0" @@ -7411,7 +7476,7 @@ }, "node_modules/decode-bmp": { "version": "0.2.1", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@canvas/image-data": "^1.0.0", @@ -7423,7 +7488,7 @@ }, "node_modules/decode-ico": { "version": "0.4.1", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@canvas/image-data": "^1.0.0", @@ -7436,7 +7501,7 @@ }, "node_modules/decompress-response": { "version": "6.0.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "mimic-response": "^3.1.0" @@ -7450,7 +7515,7 @@ }, "node_modules/deep-extend": { "version": "0.6.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=4.0.0" @@ -7508,7 +7573,7 @@ }, "node_modules/defu": { "version": "6.1.4", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/del": { @@ -7587,7 +7652,7 @@ }, "node_modules/detect-libc": { "version": "2.0.4", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "engines": { "node": ">=8" @@ -7777,7 +7842,7 @@ }, "node_modules/end-of-stream": { "version": "1.4.5", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "once": "^1.4.0" @@ -7978,7 +8043,6 @@ }, "node_modules/esbuild": { "version": "0.21.5", - "dev": true, "hasInstallScript": true, "license": "MIT", "bin": { @@ -8018,7 +8082,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -8461,7 +8524,7 @@ }, "node_modules/expand-template": { "version": "2.0.3", - "dev": true, + "devOptional": true, "license": "(MIT OR WTFPL)", "engines": { "node": ">=6" @@ -8484,7 +8547,7 @@ }, "node_modules/fast-fifo": { "version": "1.3.2", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/fast-glob": { @@ -8754,7 +8817,7 @@ }, "node_modules/fs-constants": { "version": "1.0.0", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/fs-extra": { @@ -9053,7 +9116,7 @@ }, "node_modules/github-from-package": { "version": "0.0.0", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/glob": { @@ -9400,7 +9463,7 @@ }, "node_modules/ico-endec": { "version": "0.1.6", - "dev": true, + "devOptional": true, "license": "MPL-2.0" }, "node_modules/idb": { @@ -9413,7 +9476,7 @@ }, "node_modules/ieee754": { "version": "1.2.1", - "dev": true, + "devOptional": true, "funding": [ { "type": "github", @@ -10011,7 +10074,7 @@ }, "node_modules/jiti": { "version": "1.21.7", - "dev": true, + "devOptional": true, "license": "MIT", "bin": { "jiti": "bin/jiti.js" @@ -10592,7 +10655,7 @@ }, "node_modules/mimic-response": { "version": "3.1.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=10" @@ -10625,7 +10688,7 @@ }, "node_modules/minimist": { "version": "1.2.8", - "dev": true, + "devOptional": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -10688,7 +10751,7 @@ }, "node_modules/mkdirp-classic": { "version": "0.5.3", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/modify-values": { @@ -10726,7 +10789,6 @@ }, "node_modules/nanoid": { "version": "3.3.11", - "dev": true, "funding": [ { "type": "github", @@ -10743,11 +10805,13 @@ }, "node_modules/napi-build-utils": { "version": "2.0.0", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/native-run": { - "version": "2.0.1", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/native-run/-/native-run-2.0.3.tgz", + "integrity": "sha512-U1PllBuzW5d1gfan+88L+Hky2eZx+9gv3Pf6rNBxKbORxi7boHzqiA6QFGSnqMem4j0A9tZ08NMIs5+0m/VS1Q==", "dev": true, "license": "MIT", "dependencies": { @@ -10813,7 +10877,7 @@ }, "node_modules/node-abi": { "version": "3.77.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "semver": "^7.3.5" @@ -10824,7 +10888,7 @@ }, "node_modules/node-addon-api": { "version": "6.1.0", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/node-fetch": { @@ -11386,7 +11450,6 @@ }, "node_modules/postcss": { "version": "8.5.6", - "dev": true, "funding": [ { "type": "opencollective", @@ -11533,7 +11596,7 @@ }, "node_modules/prebuild-install": { "version": "7.1.3", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "detect-libc": "^2.0.0", @@ -11558,12 +11621,12 @@ }, "node_modules/prebuild-install/node_modules/chownr": { "version": "1.1.4", - "dev": true, + "devOptional": true, "license": "ISC" }, "node_modules/prebuild-install/node_modules/readable-stream": { "version": "3.6.2", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -11576,7 +11639,7 @@ }, "node_modules/prebuild-install/node_modules/tar-fs": { "version": "2.1.3", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "chownr": "^1.1.1", @@ -11587,7 +11650,7 @@ }, "node_modules/prebuild-install/node_modules/tar-stream": { "version": "2.2.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "bl": "^4.0.3", @@ -11755,7 +11818,7 @@ }, "node_modules/pump": { "version": "3.0.3", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", @@ -11979,7 +12042,7 @@ }, "node_modules/rc": { "version": "1.2.8", - "dev": true, + "devOptional": true, "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { "deep-extend": "^0.6.0", @@ -11993,12 +12056,12 @@ }, "node_modules/rc/node_modules/ini": { "version": "1.3.8", - "dev": true, + "devOptional": true, "license": "ISC" }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -12898,7 +12961,6 @@ }, "node_modules/rollup": { "version": "4.50.0", - "dev": true, "license": "MIT", "dependencies": { "@types/estree": "1.0.8" @@ -13029,7 +13091,7 @@ }, "node_modules/semver": { "version": "7.7.2", - "dev": true, + "devOptional": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -13095,7 +13157,7 @@ }, "node_modules/sharp": { "version": "0.32.6", - "dev": true, + "devOptional": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { @@ -13117,7 +13179,7 @@ }, "node_modules/sharp-ico": { "version": "0.1.5", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "decode-ico": "*", @@ -13215,7 +13277,7 @@ }, "node_modules/simple-concat": { "version": "1.0.1", - "dev": true, + "devOptional": true, "funding": [ { "type": "github", @@ -13234,7 +13296,7 @@ }, "node_modules/simple-get": { "version": "4.0.1", - "dev": true, + "devOptional": true, "funding": [ { "type": "github", @@ -13279,7 +13341,7 @@ }, "node_modules/simple-swizzle": { "version": "0.2.2", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "is-arrayish": "^0.3.1" @@ -13287,7 +13349,7 @@ }, "node_modules/simple-swizzle/node_modules/is-arrayish": { "version": "0.3.2", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/sisteransi": { @@ -13332,7 +13394,6 @@ }, "node_modules/source-map-js": { "version": "1.2.1", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -13449,7 +13510,7 @@ }, "node_modules/streamx": { "version": "2.22.1", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "fast-fifo": "^1.3.2", @@ -13461,7 +13522,6 @@ }, "node_modules/streamx/node_modules/bare-events": { "version": "2.6.1", - "dev": true, "license": "Apache-2.0", "optional": true }, @@ -14057,7 +14117,7 @@ }, "node_modules/tar-fs": { "version": "3.1.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "pump": "^3.0.0", @@ -14070,13 +14130,11 @@ }, "node_modules/tar-fs/node_modules/bare-events": { "version": "2.6.1", - "dev": true, "license": "Apache-2.0", "optional": true }, "node_modules/tar-fs/node_modules/bare-fs": { "version": "4.2.3", - "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { @@ -14098,7 +14156,6 @@ }, "node_modules/tar-fs/node_modules/bare-os": { "version": "3.6.2", - "dev": true, "license": "Apache-2.0", "optional": true, "engines": { @@ -14107,7 +14164,6 @@ }, "node_modules/tar-fs/node_modules/bare-path": { "version": "3.0.0", - "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { @@ -14116,7 +14172,6 @@ }, "node_modules/tar-fs/node_modules/bare-stream": { "version": "2.7.0", - "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { @@ -14137,7 +14192,7 @@ }, "node_modules/tar-stream": { "version": "3.1.7", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "b4a": "^1.6.4", @@ -14231,7 +14286,7 @@ }, "node_modules/text-decoder": { "version": "1.2.3", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "dependencies": { "b4a": "^1.6.4" @@ -14348,7 +14403,7 @@ }, "node_modules/to-data-view": { "version": "1.1.0", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/to-regex-range": { @@ -14459,7 +14514,7 @@ }, "node_modules/tunnel-agent": { "version": "0.6.0", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" @@ -14556,6 +14611,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/unbox-primitive": { "version": "1.1.0", "license": "MIT", @@ -14574,7 +14643,7 @@ }, "node_modules/unconfig": { "version": "0.3.13", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@antfu/utils": "^0.7.7", @@ -14587,7 +14656,7 @@ }, "node_modules/undici-types": { "version": "7.10.0", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { @@ -14750,7 +14819,6 @@ }, "node_modules/vite": { "version": "5.4.19", - "dev": true, "license": "MIT", "dependencies": { "esbuild": "^0.21.3", diff --git a/package.json b/package.json index 0b3a90f..54605fc 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "donetick", "private": true, - "version": "1.2.7", + "version": "1.2.10", "type": "module", "engines": { "node": ">=20.0.0", diff --git a/scripts/release.sh b/scripts/release.sh new file mode 100755 index 0000000..fd53679 --- /dev/null +++ b/scripts/release.sh @@ -0,0 +1,82 @@ +#!/usr/bin/env bash +set -euo pipefail + +REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)" +cd "$REPO_ROOT" + +PLATFORM="both" +BUMP="patch" +SKIP_BUMP=false + +usage() { + cat <&2; usage; exit 1 ;; + esac +done + +if [ -f "$REPO_ROOT/.env.production" ]; then + set -a + # shellcheck disable=SC1091 + source "$REPO_ROOT/.env.production" + set +a +fi + +if [ "$SKIP_BUMP" = false ]; then + echo "→ Bumping version ($BUMP)" + node bump-version.js "$BUMP" +fi + +echo "→ Building web assets" +npm run build + +echo "→ Syncing Capacitor" +npx cap sync + +if [ -f Gemfile ] && command -v bundle >/dev/null 2>&1; then + RUN="bundle exec fastlane" +else + RUN="fastlane" +fi + +if [ "$PLATFORM" = "android" ] || [ "$PLATFORM" = "both" ]; then + echo "→ Building signed Android release (.aab)" + $RUN android release +fi + +if [ "$PLATFORM" = "ios" ] || [ "$PLATFORM" = "both" ]; then + echo "→ Building signed iOS release (.ipa)" + $RUN ios release +fi + +echo "✓ Release build complete" +[ -f android/app/build/outputs/bundle/release/app-release.aab ] && echo " Android: android/app/build/outputs/bundle/release/app-release.aab" +[ -f build/ios/Donetick.ipa ] && echo " iOS: build/ios/Donetick.ipa" + +echo "" +echo "Next steps:" +echo " git add . && git commit -m \"Release \$(node -p \"require('./package.json').version\")\"" +echo " git tag v\$(node -p \"require('./package.json').version\") && git push origin develop --tags"