UNPKG

@markvivanco/app-version-checker

Version:

React App version checking and update prompts for React, React Native, and web applications

1 lines 33.5 kB
{"version":3,"sources":["../../src/core/types.ts","../../src/core/version-compare.ts","../../src/core/version-formatter.ts","../../src/core/stores.ts","../../src/core/version-checker.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Core types for version checking\n */\n\nexport type Platform = 'ios' | 'android' | 'web';\n\nexport interface VersionInfo {\n currentVersion: string;\n latestVersion: string | null;\n updateAvailable: boolean;\n storeUrl: string | null;\n platform: Platform;\n}\n\nexport interface VersionCheckOptions {\n /** Minimum time between version checks in milliseconds */\n minCheckInterval?: number;\n /** Duration to wait after user selects \"Remind Me Later\" in milliseconds */\n remindLaterDuration?: number;\n /** Whether to skip version checking on web platform */\n skipWebPlatform?: boolean;\n /** Custom platform detection function */\n getPlatform?: () => Platform;\n}\n\nexport interface VersionCheckTimestamps {\n lastCheckTime: number | null;\n remindLaterTime: number | null;\n}\n\nexport interface AppStoreConfig {\n /** iOS App Store ID */\n iosAppStoreId?: string;\n /** Android package name */\n androidPackageName?: string;\n /** Custom iOS App Store URL */\n iosStoreUrl?: string;\n /** Custom Android Play Store URL */\n androidStoreUrl?: string;\n}\n\nexport interface VersionCheckResult {\n /** Whether an update is available */\n shouldShowPrompt: boolean;\n /** Version information */\n versionInfo: VersionInfo;\n /** Reason for not showing prompt (if applicable) */\n skipReason?: 'no_update' | 'web_platform' | 'remind_later' | 'too_soon' | 'error';\n}\n\n/** Version check intervals (in milliseconds) */\nexport const DEFAULT_CHECK_INTERVALS = {\n MIN_CHECK_INTERVAL: 60 * 60 * 1000, // 1 hour minimum between checks\n REMIND_LATER_DURATION: 24 * 60 * 60 * 1000, // 24 hours for \"remind me later\"\n} as const;","/**\n * Core version comparison utilities\n * Pure functions with no external dependencies\n */\n\n/**\n * Compare two semantic version strings\n * Returns: -1 if v1 < v2, 0 if v1 == v2, 1 if v1 > v2\n */\nexport function compareVersions(v1: string, v2: string): number {\n const parts1 = v1.split('.').map(num => parseInt(num, 10));\n const parts2 = v2.split('.').map(num => parseInt(num, 10));\n\n // Pad arrays to same length\n const maxLength = Math.max(parts1.length, parts2.length);\n while (parts1.length < maxLength) parts1.push(0);\n while (parts2.length < maxLength) parts2.push(0);\n\n for (let i = 0; i < maxLength; i++) {\n if (parts1[i] < parts2[i]) return -1;\n if (parts1[i] > parts2[i]) return 1;\n }\n\n return 0;\n}\n\n/**\n * Check if an update is available by comparing versions\n */\nexport function isUpdateAvailable(currentVersion: string, latestVersion: string): boolean {\n return compareVersions(currentVersion, latestVersion) < 0;\n}\n\n/**\n * Parse a version string into its components\n */\nexport function parseVersion(version: string): {\n major: number;\n minor: number;\n patch: number;\n build?: number;\n} {\n const parts = version.split('.').map(num => parseInt(num, 10));\n return {\n major: parts[0] || 0,\n minor: parts[1] || 0,\n patch: parts[2] || 0,\n build: parts[3] // Optional build number\n };\n}\n\n/**\n * Format version components back into a string\n */\nexport function formatVersion(\n major: number,\n minor: number,\n patch: number,\n build?: number\n): string {\n const parts = [major, minor, patch];\n if (build !== undefined) {\n parts.push(build);\n }\n return parts.join('.');\n}\n\n/**\n * Get the major version from a version string\n */\nexport function getMajorVersion(version: string): number {\n return parseVersion(version).major;\n}\n\n/**\n * Get the minor version from a version string\n */\nexport function getMinorVersion(version: string): number {\n return parseVersion(version).minor;\n}\n\n/**\n * Get the patch version from a version string\n */\nexport function getPatchVersion(version: string): number {\n return parseVersion(version).patch;\n}\n\n/**\n * Check if version is a valid semantic version string\n */\nexport function isValidVersion(version: string): boolean {\n const regex = /^\\d+\\.\\d+\\.\\d+(\\.\\d+)?$/;\n return regex.test(version);\n}\n\n/**\n * Get the difference between two versions\n * Returns an object describing what changed\n */\nexport function getVersionDiff(v1: string, v2: string): {\n type: 'major' | 'minor' | 'patch' | 'build' | 'none';\n fromVersion: string;\n toVersion: string;\n} {\n const comparison = compareVersions(v1, v2);\n\n if (comparison === 0) {\n return { type: 'none', fromVersion: v1, toVersion: v2 };\n }\n\n const parsed1 = parseVersion(v1);\n const parsed2 = parseVersion(v2);\n\n let type: 'major' | 'minor' | 'patch' | 'build' = 'build';\n\n if (parsed1.major !== parsed2.major) {\n type = 'major';\n } else if (parsed1.minor !== parsed2.minor) {\n type = 'minor';\n } else if (parsed1.patch !== parsed2.patch) {\n type = 'patch';\n }\n\n return {\n type,\n fromVersion: comparison < 0 ? v1 : v2,\n toVersion: comparison < 0 ? v2 : v1\n };\n}","/**\n * Version formatting utilities\n * Pure functions for formatting version strings\n */\n\n/**\n * Format a version with optional build number\n * @param platformVersion The platform-specific version (e.g., \"1.0.36\")\n * @param buildNumber Optional build number (e.g., \"349\")\n * @returns Formatted version string (e.g., \"1.0.36.349\")\n */\nexport function formatVersionWithBuild(\n platformVersion: string,\n buildNumber?: string | number\n): string {\n if (buildNumber !== undefined && buildNumber !== null && buildNumber !== '') {\n return `${platformVersion}.${buildNumber}`;\n }\n return platformVersion;\n}\n\n/**\n * Extract build number from version string\n * @param version Version string that may contain build number\n * @returns Build number or undefined\n */\nexport function extractBuildNumber(version: string): string | undefined {\n const parts = version.split('.');\n if (parts.length > 3) {\n return parts[3];\n }\n return undefined;\n}\n\n/**\n * Extract base version without build number\n * @param version Version string (e.g., \"1.0.36.349\")\n * @returns Base version without build (e.g., \"1.0.36\")\n */\nexport function extractBaseVersion(version: string): string {\n const parts = version.split('.');\n return parts.slice(0, 3).join('.');\n}\n\n/**\n * Normalize version string to ensure consistent format\n * @param version Version string to normalize\n * @param padToLength Minimum number of segments (default: 3)\n * @returns Normalized version string\n */\nexport function normalizeVersion(version: string, padToLength: number = 3): string {\n const parts = version.split('.');\n\n // Ensure all parts are valid numbers\n const numericParts = parts\n .map(part => parseInt(part, 10))\n .filter(num => !isNaN(num));\n\n // Pad with zeros if needed\n while (numericParts.length < padToLength) {\n numericParts.push(0);\n }\n\n return numericParts.join('.');\n}\n\n/**\n * Create a display-friendly version string\n * @param version Version string\n * @param includePrefix Whether to include \"v\" prefix\n * @returns Display version (e.g., \"v1.0.36\")\n */\nexport function formatDisplayVersion(\n version: string,\n includePrefix: boolean = true\n): string {\n const normalized = normalizeVersion(version, 3);\n return includePrefix ? `v${normalized}` : normalized;\n}\n\n/**\n * Compare version strings for sorting\n * @param versions Array of version strings\n * @param descending Sort in descending order (latest first)\n * @returns Sorted array of versions\n */\nexport function sortVersions(versions: string[], descending: boolean = true): string[] {\n const sorted = [...versions].sort((a, b) => {\n const aParts = a.split('.').map(num => parseInt(num, 10));\n const bParts = b.split('.').map(num => parseInt(num, 10));\n\n const maxLength = Math.max(aParts.length, bParts.length);\n\n for (let i = 0; i < maxLength; i++) {\n const aPart = aParts[i] || 0;\n const bPart = bParts[i] || 0;\n\n if (aPart !== bPart) {\n return descending ? bPart - aPart : aPart - bPart;\n }\n }\n\n return 0;\n });\n\n return sorted;\n}\n\n/**\n * Get the latest version from an array of versions\n * @param versions Array of version strings\n * @returns Latest version string or null if array is empty\n */\nexport function getLatestVersion(versions: string[]): string | null {\n if (!versions || versions.length === 0) {\n return null;\n }\n\n const sorted = sortVersions(versions, true);\n return sorted[0];\n}","/**\n * App store utilities\n * Functions for generating app store URLs and handling store-specific logic\n */\n\nimport { Platform, AppStoreConfig } from './types';\n\n/**\n * Generate iOS App Store URL\n * @param appStoreId The iOS App Store ID\n * @param customUrl Optional custom URL to override default\n */\nexport function getIosStoreUrl(appStoreId?: string, customUrl?: string): string | null {\n if (customUrl) {\n return customUrl;\n }\n\n if (!appStoreId) {\n return null;\n }\n\n return `https://apps.apple.com/app/id${appStoreId}`;\n}\n\n/**\n * Generate Android Play Store URL\n * @param packageName The Android package name\n * @param customUrl Optional custom URL to override default\n */\nexport function getAndroidStoreUrl(packageName?: string, customUrl?: string): string | null {\n if (customUrl) {\n return customUrl;\n }\n\n if (!packageName) {\n return null;\n }\n\n return `https://play.google.com/store/apps/details?id=${packageName}`;\n}\n\n/**\n * Get the appropriate store URL for a platform\n */\nexport function getStoreUrl(platform: Platform, config: AppStoreConfig): string | null {\n switch (platform) {\n case 'ios':\n return getIosStoreUrl(config.iosAppStoreId, config.iosStoreUrl);\n case 'android':\n return getAndroidStoreUrl(config.androidPackageName, config.androidStoreUrl);\n case 'web':\n return null;\n default:\n return null;\n }\n}\n\n/**\n * Validate an iOS App Store ID\n */\nexport function isValidIosAppStoreId(appStoreId: string): boolean {\n // iOS App Store IDs are typically 9-10 digit numbers\n return /^\\d{9,10}$/.test(appStoreId);\n}\n\n/**\n * Validate an Android package name\n */\nexport function isValidAndroidPackageName(packageName: string): boolean {\n // Android package names follow reverse domain name notation\n // e.g., com.example.app\n return /^[a-zA-Z][a-zA-Z0-9_]*(\\.[a-zA-Z][a-zA-Z0-9_]*)+$/.test(packageName);\n}\n\n/**\n * Extract app ID from store URL\n */\nexport function extractAppIdFromUrl(url: string, platform: Platform): string | null {\n if (platform === 'ios') {\n // Extract from URLs like: https://apps.apple.com/app/id123456789\n const match = url.match(/\\/id(\\d+)/);\n return match ? match[1] : null;\n }\n\n if (platform === 'android') {\n // Extract from URLs like: https://play.google.com/store/apps/details?id=com.example.app\n const match = url.match(/[?&]id=([^&]+)/);\n return match ? match[1] : null;\n }\n\n return null;\n}\n\n/**\n * Get store name for display\n */\nexport function getStoreName(platform: Platform): string {\n switch (platform) {\n case 'ios':\n return 'App Store';\n case 'android':\n return 'Google Play Store';\n case 'web':\n return 'Web';\n default:\n return 'Unknown';\n }\n}\n\n/**\n * Get store badge image URL (for documentation/UI purposes)\n */\nexport function getStoreBadgeUrl(platform: Platform, _locale: string = 'en-US'): string | null {\n switch (platform) {\n case 'ios':\n return `https://developer.apple.com/app-store/marketing/guidelines/images/badge-download-on-the-app-store.svg`;\n case 'android':\n return `https://play.google.com/intl/en_us/badges/images/generic/en_badge_web_generic.png`;\n default:\n return null;\n }\n}","/**\n * Main VersionChecker class\n * Coordinates version checking using pluggable providers\n */\n\nimport {\n Platform,\n VersionInfo,\n VersionCheckOptions,\n VersionCheckResult,\n DEFAULT_CHECK_INTERVALS,\n} from './types';\nimport { isUpdateAvailable } from './version-compare';\nimport { getStoreUrl } from './stores';\nimport { IVersionDataProvider } from '../providers/data-provider.interface';\nimport { IStorageProvider } from '../providers/storage-provider.interface';\n\nexport class VersionChecker {\n private dataProvider: IVersionDataProvider;\n private storageProvider: IStorageProvider;\n private options: Required<VersionCheckOptions>;\n private initialized: boolean = false;\n\n constructor(\n dataProvider: IVersionDataProvider,\n storageProvider: IStorageProvider,\n options: VersionCheckOptions = {}\n ) {\n this.dataProvider = dataProvider;\n this.storageProvider = storageProvider;\n\n // Merge with default options\n this.options = {\n minCheckInterval: options.minCheckInterval ?? DEFAULT_CHECK_INTERVALS.MIN_CHECK_INTERVAL,\n remindLaterDuration: options.remindLaterDuration ?? DEFAULT_CHECK_INTERVALS.REMIND_LATER_DURATION,\n skipWebPlatform: options.skipWebPlatform ?? true,\n getPlatform: options.getPlatform ?? (() => this.detectPlatform()),\n };\n }\n\n /**\n * Initialize the version checker\n */\n async initialize(): Promise<void> {\n if (this.initialized) {\n return;\n }\n\n // Initialize providers if they have initialization logic\n if (this.dataProvider.initialize) {\n await this.dataProvider.initialize();\n }\n\n if (this.storageProvider.initialize) {\n await this.storageProvider.initialize();\n }\n\n this.initialized = true;\n }\n\n /**\n * Detect the current platform\n */\n private detectPlatform(): Platform {\n // Use provider's platform detection if available\n if (this.dataProvider.getCurrentPlatform) {\n return this.dataProvider.getCurrentPlatform();\n }\n\n // Basic platform detection\n if (typeof window !== 'undefined') {\n const userAgent = window.navigator?.userAgent || '';\n\n if (/android/i.test(userAgent)) {\n return 'android';\n }\n\n if (/iPad|iPhone|iPod/.test(userAgent)) {\n return 'ios';\n }\n\n return 'web';\n }\n\n // Default to web if we can't determine\n return 'web';\n }\n\n /**\n * Get the current platform\n */\n getPlatform(): Platform {\n return this.options.getPlatform();\n }\n\n /**\n * Get version information\n */\n async getVersionInfo(): Promise<VersionInfo> {\n const platform = this.getPlatform();\n const currentVersion = await this.dataProvider.getCurrentVersion();\n const latestVersion = await this.dataProvider.getLatestVersion(platform);\n const appStoreConfig = await this.dataProvider.getAppStoreConfig();\n\n const updateAvailable = latestVersion\n ? isUpdateAvailable(currentVersion, latestVersion)\n : false;\n\n const storeUrl = getStoreUrl(platform, appStoreConfig);\n\n return {\n currentVersion,\n latestVersion,\n updateAvailable,\n storeUrl,\n platform,\n };\n }\n\n /**\n * Check if an update is available\n */\n async isUpdateAvailable(): Promise<boolean> {\n const platform = this.getPlatform();\n\n // Skip check for web platform if configured\n if (platform === 'web' && this.options.skipWebPlatform) {\n return false;\n }\n\n const versionInfo = await this.getVersionInfo();\n return versionInfo.updateAvailable;\n }\n\n /**\n * Check if we should show the update prompt\n */\n async shouldShowUpdatePrompt(): Promise<VersionCheckResult> {\n const platform = this.getPlatform();\n\n // Skip for web platform if configured\n if (platform === 'web' && this.options.skipWebPlatform) {\n const versionInfo = await this.getVersionInfo();\n return {\n shouldShowPrompt: false,\n versionInfo,\n skipReason: 'web_platform',\n };\n }\n\n try {\n const versionInfo = await this.getVersionInfo();\n\n // No update available\n if (!versionInfo.updateAvailable) {\n return {\n shouldShowPrompt: false,\n versionInfo,\n skipReason: 'no_update',\n };\n }\n\n // Check if we're in \"remind me later\" period\n const remindLaterTime = await this.storageProvider.getRemindLaterTime();\n if (remindLaterTime && Date.now() < remindLaterTime) {\n return {\n shouldShowPrompt: false,\n versionInfo,\n skipReason: 'remind_later',\n };\n }\n\n // Check minimum interval between checks\n const lastCheckTime = await this.storageProvider.getLastCheckTime();\n if (lastCheckTime && Date.now() - lastCheckTime < this.options.minCheckInterval) {\n return {\n shouldShowPrompt: false,\n versionInfo,\n skipReason: 'too_soon',\n };\n }\n\n // Check if this version was already shown (optional)\n if (this.storageProvider.getLastShownVersion) {\n const lastShownVersion = await this.storageProvider.getLastShownVersion();\n if (lastShownVersion === versionInfo.latestVersion) {\n // Still check mandatory updates\n if (this.dataProvider.isUpdateMandatory) {\n const isMandatory = await this.dataProvider.isUpdateMandatory(\n versionInfo.currentVersion,\n versionInfo.latestVersion!\n );\n if (!isMandatory) {\n return {\n shouldShowPrompt: false,\n versionInfo,\n skipReason: 'remind_later',\n };\n }\n } else {\n return {\n shouldShowPrompt: false,\n versionInfo,\n skipReason: 'remind_later',\n };\n }\n }\n }\n\n // Update last check time\n await this.storageProvider.setLastCheckTime(Date.now());\n\n // Record shown version if supported\n if (this.storageProvider.setLastShownVersion && versionInfo.latestVersion) {\n await this.storageProvider.setLastShownVersion(versionInfo.latestVersion);\n }\n\n return {\n shouldShowPrompt: true,\n versionInfo,\n };\n } catch (error) {\n console.error('Error checking for updates:', error);\n const versionInfo = await this.getVersionInfo();\n return {\n shouldShowPrompt: false,\n versionInfo,\n skipReason: 'error',\n };\n }\n }\n\n /**\n * Set \"remind me later\" for the update prompt\n */\n async setRemindMeLater(): Promise<void> {\n const remindTime = Date.now() + this.options.remindLaterDuration;\n await this.storageProvider.setRemindLaterTime(remindTime);\n\n // Increment dismiss count if supported\n if (this.storageProvider.incrementDismissCount) {\n await this.storageProvider.incrementDismissCount();\n }\n }\n\n /**\n * Clear the \"remind me later\" setting\n */\n async clearRemindMeLater(): Promise<void> {\n await this.storageProvider.clearRemindLaterTime();\n }\n\n /**\n * Check if update is mandatory\n */\n async isUpdateMandatory(): Promise<boolean> {\n if (!this.dataProvider.isUpdateMandatory) {\n return false;\n }\n\n const versionInfo = await this.getVersionInfo();\n if (!versionInfo.latestVersion) {\n return false;\n }\n\n return await this.dataProvider.isUpdateMandatory(\n versionInfo.currentVersion,\n versionInfo.latestVersion\n );\n }\n\n /**\n * Get changelog for the latest version\n */\n async getChangeLog(): Promise<string | null> {\n if (!this.dataProvider.getChangeLog) {\n return null;\n }\n\n const versionInfo = await this.getVersionInfo();\n if (!versionInfo.latestVersion) {\n return null;\n }\n\n return await this.dataProvider.getChangeLog(versionInfo.latestVersion);\n }\n\n /**\n * Reset all version check data (useful for testing)\n */\n async resetVersionCheckData(): Promise<void> {\n await this.storageProvider.clearRemindLaterTime();\n await this.storageProvider.setLastCheckTime(0);\n\n if (this.storageProvider.clearAll) {\n await this.storageProvider.clearAll();\n }\n }\n\n /**\n * Get formatted version string\n */\n async getFormattedVersion(): Promise<string> {\n if (this.dataProvider.getFormattedVersion) {\n return await this.dataProvider.getFormattedVersion();\n }\n\n return await this.dataProvider.getCurrentVersion();\n }\n\n /**\n * Dispose of resources\n */\n async dispose(): Promise<void> {\n if (this.dataProvider.dispose) {\n await this.dataProvider.dispose();\n }\n\n if (this.storageProvider.dispose) {\n await this.storageProvider.dispose();\n }\n\n this.initialized = false;\n }\n}"]}