@markvivanco/app-version-checker
Version:
React App version checking and update prompts for React, React Native, and web applications
1 lines • 23.8 kB
Source Map (JSON)
{"version":3,"sources":["../../../src/providers/storage-provider.interface.ts","../../../src/adapters/stores/local-storage-provider.ts","../../../src/adapters/stores/async-storage-provider.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Storage provider interface for version check preferences\n * Implement this interface to store timestamps and preferences in any storage system\n */\n\n/**\n * Interface for storing version check timestamps and preferences\n * Can be implemented using localStorage, AsyncStorage, database, etc.\n */\nexport interface IStorageProvider {\n /**\n * Get the timestamp of the last version check\n */\n getLastCheckTime(): Promise<number | null>;\n\n /**\n * Set the timestamp of the last version check\n */\n setLastCheckTime(timestamp: number): Promise<void>;\n\n /**\n * Get the \"remind me later\" timestamp\n * Returns when the reminder period expires\n */\n getRemindLaterTime(): Promise<number | null>;\n\n /**\n * Set the \"remind me later\" timestamp\n */\n setRemindLaterTime(timestamp: number): Promise<void>;\n\n /**\n * Clear the \"remind me later\" timestamp\n */\n clearRemindLaterTime(): Promise<void>;\n\n /**\n * Optional: Get the number of times update was dismissed\n */\n getDismissCount?(): Promise<number>;\n\n /**\n * Optional: Increment the dismiss count\n */\n incrementDismissCount?(): Promise<void>;\n\n /**\n * Optional: Get the last shown version\n * Useful to avoid showing the same update multiple times\n */\n getLastShownVersion?(): Promise<string | null>;\n\n /**\n * Optional: Set the last shown version\n */\n setLastShownVersion?(version: string): Promise<void>;\n\n /**\n * Optional: Get user preference for auto-updates\n */\n getAutoUpdateEnabled?(): Promise<boolean>;\n\n /**\n * Optional: Set user preference for auto-updates\n */\n setAutoUpdateEnabled?(enabled: boolean): Promise<void>;\n\n /**\n * Optional: Get all stored preferences as an object\n */\n getAllPreferences?(): Promise<Record<string, any>>;\n\n /**\n * Optional: Clear all stored data\n */\n clearAll?(): Promise<void>;\n\n /**\n * Optional: Initialize the storage provider\n */\n initialize?(): Promise<void>;\n\n /**\n * Optional: Dispose of resources\n */\n dispose?(): Promise<void>;\n}\n\n/**\n * Abstract base class for storage providers\n * Provides default implementations for optional methods\n */\nexport abstract class BaseStorageProvider implements IStorageProvider {\n abstract getLastCheckTime(): Promise<number | null>;\n abstract setLastCheckTime(timestamp: number): Promise<void>;\n abstract getRemindLaterTime(): Promise<number | null>;\n abstract setRemindLaterTime(timestamp: number): Promise<void>;\n abstract clearRemindLaterTime(): Promise<void>;\n\n async getDismissCount(): Promise<number> {\n return 0;\n }\n\n async incrementDismissCount(): Promise<void> {\n // Default no-op\n }\n\n async initialize(): Promise<void> {\n // Default no-op\n }\n\n async dispose(): Promise<void> {\n // Default no-op\n }\n}\n\n/**\n * In-memory storage provider for testing\n */\nexport class InMemoryStorageProvider extends BaseStorageProvider {\n private storage: Map<string, any> = new Map();\n\n async getLastCheckTime(): Promise<number | null> {\n return this.storage.get('lastCheckTime') || null;\n }\n\n async setLastCheckTime(timestamp: number): Promise<void> {\n this.storage.set('lastCheckTime', timestamp);\n }\n\n async getRemindLaterTime(): Promise<number | null> {\n return this.storage.get('remindLaterTime') || null;\n }\n\n async setRemindLaterTime(timestamp: number): Promise<void> {\n this.storage.set('remindLaterTime', timestamp);\n }\n\n async clearRemindLaterTime(): Promise<void> {\n this.storage.delete('remindLaterTime');\n }\n\n async getDismissCount(): Promise<number> {\n return this.storage.get('dismissCount') || 0;\n }\n\n async incrementDismissCount(): Promise<void> {\n const current = await this.getDismissCount();\n this.storage.set('dismissCount', current + 1);\n }\n\n async getLastShownVersion(): Promise<string | null> {\n return this.storage.get('lastShownVersion') || null;\n }\n\n async setLastShownVersion(version: string): Promise<void> {\n this.storage.set('lastShownVersion', version);\n }\n\n async clearAll(): Promise<void> {\n this.storage.clear();\n }\n\n async getAllPreferences(): Promise<Record<string, any>> {\n const preferences: Record<string, any> = {};\n this.storage.forEach((value, key) => {\n preferences[key] = value;\n });\n return preferences;\n }\n}","/**\n * LocalStorage implementation of IStorageProvider\n * For use in web browsers\n */\n\nimport { BaseStorageProvider } from '../../providers/storage-provider.interface';\n\nexport class LocalStorageProvider extends BaseStorageProvider {\n private readonly prefix: string;\n\n constructor(prefix: string = 'app_version_check_') {\n super();\n this.prefix = prefix;\n }\n\n private getKey(key: string): string {\n return `${this.prefix}${key}`;\n }\n\n async getLastCheckTime(): Promise<number | null> {\n try {\n const value = localStorage.getItem(this.getKey('lastCheckTime'));\n return value ? parseInt(value, 10) : null;\n } catch (error) {\n console.error('Error reading last check time:', error);\n return null;\n }\n }\n\n async setLastCheckTime(timestamp: number): Promise<void> {\n try {\n localStorage.setItem(this.getKey('lastCheckTime'), timestamp.toString());\n } catch (error) {\n console.error('Error setting last check time:', error);\n }\n }\n\n async getRemindLaterTime(): Promise<number | null> {\n try {\n const value = localStorage.getItem(this.getKey('remindLaterTime'));\n return value ? parseInt(value, 10) : null;\n } catch (error) {\n console.error('Error reading remind later time:', error);\n return null;\n }\n }\n\n async setRemindLaterTime(timestamp: number): Promise<void> {\n try {\n localStorage.setItem(this.getKey('remindLaterTime'), timestamp.toString());\n } catch (error) {\n console.error('Error setting remind later time:', error);\n }\n }\n\n async clearRemindLaterTime(): Promise<void> {\n try {\n localStorage.removeItem(this.getKey('remindLaterTime'));\n } catch (error) {\n console.error('Error clearing remind later time:', error);\n }\n }\n\n async getDismissCount(): Promise<number> {\n try {\n const value = localStorage.getItem(this.getKey('dismissCount'));\n return value ? parseInt(value, 10) : 0;\n } catch (error) {\n console.error('Error reading dismiss count:', error);\n return 0;\n }\n }\n\n async incrementDismissCount(): Promise<void> {\n try {\n const current = await this.getDismissCount();\n localStorage.setItem(this.getKey('dismissCount'), (current + 1).toString());\n } catch (error) {\n console.error('Error incrementing dismiss count:', error);\n }\n }\n\n async getLastShownVersion(): Promise<string | null> {\n try {\n return localStorage.getItem(this.getKey('lastShownVersion'));\n } catch (error) {\n console.error('Error reading last shown version:', error);\n return null;\n }\n }\n\n async setLastShownVersion(version: string): Promise<void> {\n try {\n localStorage.setItem(this.getKey('lastShownVersion'), version);\n } catch (error) {\n console.error('Error setting last shown version:', error);\n }\n }\n\n async getAutoUpdateEnabled(): Promise<boolean> {\n try {\n const value = localStorage.getItem(this.getKey('autoUpdateEnabled'));\n return value === 'true';\n } catch (error) {\n console.error('Error reading auto update preference:', error);\n return false;\n }\n }\n\n async setAutoUpdateEnabled(enabled: boolean): Promise<void> {\n try {\n localStorage.setItem(this.getKey('autoUpdateEnabled'), enabled.toString());\n } catch (error) {\n console.error('Error setting auto update preference:', error);\n }\n }\n\n async getAllPreferences(): Promise<Record<string, any>> {\n const preferences: Record<string, any> = {};\n const keys = [\n 'lastCheckTime',\n 'remindLaterTime',\n 'dismissCount',\n 'lastShownVersion',\n 'autoUpdateEnabled'\n ];\n\n for (const key of keys) {\n try {\n const value = localStorage.getItem(this.getKey(key));\n if (value !== null) {\n preferences[key] = value;\n }\n } catch (error) {\n console.error(`Error reading ${key}:`, error);\n }\n }\n\n return preferences;\n }\n\n async clearAll(): Promise<void> {\n const keysToRemove: string[] = [];\n\n // Find all keys with our prefix\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key && key.startsWith(this.prefix)) {\n keysToRemove.push(key);\n }\n }\n\n // Remove all found keys\n for (const key of keysToRemove) {\n try {\n localStorage.removeItem(key);\n } catch (error) {\n console.error(`Error removing ${key}:`, error);\n }\n }\n }\n}","/**\n * AsyncStorage implementation of IStorageProvider\n * For use with React Native AsyncStorage or similar async storage APIs\n */\n\nimport { BaseStorageProvider } from '../../providers/storage-provider.interface';\n\n/**\n * Interface matching React Native AsyncStorage API\n */\nexport interface IAsyncStorage {\n getItem(key: string): Promise<string | null>;\n setItem(key: string, value: string): Promise<void>;\n removeItem(key: string): Promise<void>;\n getAllKeys?(): Promise<string[]>;\n multiRemove?(keys: string[]): Promise<void>;\n}\n\nexport class AsyncStorageProvider extends BaseStorageProvider {\n private readonly storage: IAsyncStorage;\n private readonly prefix: string;\n\n constructor(storage: IAsyncStorage, prefix: string = 'app_version_check_') {\n super();\n this.storage = storage;\n this.prefix = prefix;\n }\n\n private getKey(key: string): string {\n return `${this.prefix}${key}`;\n }\n\n async getLastCheckTime(): Promise<number | null> {\n try {\n const value = await this.storage.getItem(this.getKey('lastCheckTime'));\n return value ? parseInt(value, 10) : null;\n } catch (error) {\n console.error('Error reading last check time:', error);\n return null;\n }\n }\n\n async setLastCheckTime(timestamp: number): Promise<void> {\n try {\n await this.storage.setItem(this.getKey('lastCheckTime'), timestamp.toString());\n } catch (error) {\n console.error('Error setting last check time:', error);\n }\n }\n\n async getRemindLaterTime(): Promise<number | null> {\n try {\n const value = await this.storage.getItem(this.getKey('remindLaterTime'));\n return value ? parseInt(value, 10) : null;\n } catch (error) {\n console.error('Error reading remind later time:', error);\n return null;\n }\n }\n\n async setRemindLaterTime(timestamp: number): Promise<void> {\n try {\n await this.storage.setItem(this.getKey('remindLaterTime'), timestamp.toString());\n } catch (error) {\n console.error('Error setting remind later time:', error);\n }\n }\n\n async clearRemindLaterTime(): Promise<void> {\n try {\n await this.storage.removeItem(this.getKey('remindLaterTime'));\n } catch (error) {\n console.error('Error clearing remind later time:', error);\n }\n }\n\n async getDismissCount(): Promise<number> {\n try {\n const value = await this.storage.getItem(this.getKey('dismissCount'));\n return value ? parseInt(value, 10) : 0;\n } catch (error) {\n console.error('Error reading dismiss count:', error);\n return 0;\n }\n }\n\n async incrementDismissCount(): Promise<void> {\n try {\n const current = await this.getDismissCount();\n await this.storage.setItem(this.getKey('dismissCount'), (current + 1).toString());\n } catch (error) {\n console.error('Error incrementing dismiss count:', error);\n }\n }\n\n async getLastShownVersion(): Promise<string | null> {\n try {\n return await this.storage.getItem(this.getKey('lastShownVersion'));\n } catch (error) {\n console.error('Error reading last shown version:', error);\n return null;\n }\n }\n\n async setLastShownVersion(version: string): Promise<void> {\n try {\n await this.storage.setItem(this.getKey('lastShownVersion'), version);\n } catch (error) {\n console.error('Error setting last shown version:', error);\n }\n }\n\n async getAutoUpdateEnabled(): Promise<boolean> {\n try {\n const value = await this.storage.getItem(this.getKey('autoUpdateEnabled'));\n return value === 'true';\n } catch (error) {\n console.error('Error reading auto update preference:', error);\n return false;\n }\n }\n\n async setAutoUpdateEnabled(enabled: boolean): Promise<void> {\n try {\n await this.storage.setItem(this.getKey('autoUpdateEnabled'), enabled.toString());\n } catch (error) {\n console.error('Error setting auto update preference:', error);\n }\n }\n\n async getAllPreferences(): Promise<Record<string, any>> {\n const preferences: Record<string, any> = {};\n const keys = [\n 'lastCheckTime',\n 'remindLaterTime',\n 'dismissCount',\n 'lastShownVersion',\n 'autoUpdateEnabled'\n ];\n\n for (const key of keys) {\n try {\n const value = await this.storage.getItem(this.getKey(key));\n if (value !== null) {\n preferences[key] = value;\n }\n } catch (error) {\n console.error(`Error reading ${key}:`, error);\n }\n }\n\n return preferences;\n }\n\n async clearAll(): Promise<void> {\n if (this.storage.getAllKeys && this.storage.multiRemove) {\n try {\n // Use multi-remove if available (more efficient)\n const allKeys = await this.storage.getAllKeys();\n const keysToRemove = allKeys.filter(key => key.startsWith(this.prefix));\n\n if (keysToRemove.length > 0) {\n await this.storage.multiRemove(keysToRemove);\n }\n } catch (error) {\n console.error('Error clearing all preferences:', error);\n }\n } else {\n // Fall back to removing keys one by one\n const keys = [\n 'lastCheckTime',\n 'remindLaterTime',\n 'dismissCount',\n 'lastShownVersion',\n 'autoUpdateEnabled'\n ];\n\n for (const key of keys) {\n try {\n await this.storage.removeItem(this.getKey(key));\n } catch (error) {\n console.error(`Error removing ${key}:`, error);\n }\n }\n }\n }\n}"]}