UNPKG

date-core

Version:

Modern, lightweight date utilities library for React Native and web apps. Features comprehensive locale support with Arabic numerals, intelligent error handling, and production-ready logging. 93% smaller bundle size than heavy date libraries.

427 lines (373 loc) 11.6 kB
/** * App Initialization Demo * * Demonstrates how to configure the entire date-utils app during initialization * Shows how users can pass configuration objects for locale and error handling */ import { initializeApp, getAppInitializationStatus, getInitializationStatus, configureErrorHandling, getErrorConfig, formatDate, formatDateLocalized, getRelativeTimeLocalized, getDayName, registerLocale, setLocale, } from '../lib/date-utils.js' import { fr, es, de } from '../lib/locales/index.js' /** * Demo: Basic app initialization */ export const demoBasicInitialization = () => { console.log('=== Basic App Initialization Demo ===\n') // Basic initialization with just locale const result = initializeApp({ locale: 'ar', }) console.log('Basic initialization result:', result) console.log('App initialized:', getAppInitializationStatus()) console.log('Current status:', getInitializationStatus()) console.log('') } /** * Demo: Complete app initialization with all options */ export const demoCompleteInitialization = () => { console.log('=== Complete App Initialization Demo ===\n') // Complete initialization with all configuration options const result = initializeApp({ // Locale configuration locale: 'en', // Error handling configuration logErrors: true, fallbackDate: new Date('2024-01-01'), fallbackString: 'Date Error', fallbackNumber: 0, messages: { invalidDate: 'Custom: Invalid date provided', invalidDateNull: 'Custom: Date cannot be null', invalidDateEmpty: 'Custom: Date cannot be empty', invalidDateNaN: 'Custom: Date results in NaN', }, // Additional configuration autoRegisterLocales: true, validateDates: true, strictMode: false, }) console.log('Complete initialization result:', result) console.log('Current error config:', getErrorConfig()) console.log('') } /** * Demo: Minimal initialization (using defaults) */ export const demoMinimalInitialization = () => { console.log('=== Minimal Initialization Demo ===\n') // Minimal initialization - uses all defaults const result = initializeApp() console.log('Minimal initialization result:', result) console.log('Uses default locale: en') console.log('Uses default error handling') console.log('') } /** * Demo: Custom error handling configuration */ export const demoCustomErrorHandling = () => { console.log('=== Custom Error Handling Demo ===\n') // Initialize with custom error handling initializeApp({ locale: 'fr', logErrors: false, // Disable error logging fallbackDate: new Date('2024-06-15'), fallbackString: 'Date Invalide', messages: { invalidDate: 'Date invalide fournie', invalidDateNull: 'La date ne peut pas être nulle', invalidDateEmpty: 'La date ne peut pas être vide', invalidDateNaN: 'La date résulte en NaN', }, }) console.log('Custom error handling configured') console.log('Error config:', getErrorConfig()) // Test with invalid dates (no console errors due to logErrors: false) console.log('Testing invalid dates (no console errors):') console.log('formatDate(null):', formatDate(null)) console.log('formatDate("invalid"):', formatDate('invalid')) console.log('') } /** * Demo: Production-ready initialization */ export const demoProductionInitialization = () => { console.log('=== Production Initialization Demo ===\n') // Production-ready configuration initializeApp({ locale: 'en', logErrors: false, // Disable error logging in production fallbackDate: new Date(), // Use current date as fallback fallbackString: 'Invalid Date', strictMode: false, // Allow flexible date handling validateDates: true, // Keep validation enabled }) console.log('Production configuration applied') console.log('Error logging disabled for production') console.log('Date validation enabled') console.log('Strict mode disabled for flexibility') console.log('') } /** * Demo: Development initialization */ export const demoDevelopmentInitialization = () => { console.log('=== Development Initialization Demo ===\n') // Development configuration with detailed logging initializeApp({ locale: 'ar', logErrors: true, // Enable error logging for debugging fallbackDate: new Date('2024-01-01'), // Use fixed date for consistency fallbackString: 'DEBUG: Invalid Date', strictMode: true, // Enable strict mode for catching issues validateDates: true, messages: { invalidDate: 'DEBUG: Invalid date provided', invalidDateNull: 'DEBUG: Date cannot be null', invalidDateEmpty: 'DEBUG: Date cannot be empty', invalidDateNaN: 'DEBUG: Date results in NaN', }, }) console.log('Development configuration applied') console.log('Error logging enabled for debugging') console.log('Strict mode enabled') console.log('Debug messages configured') console.log('') } /** * Demo: Multi-locale initialization */ export const demoMultiLocaleInitialization = () => { console.log('=== Multi-Locale Initialization Demo ===\n') // Initialize with one locale initializeApp({ locale: 'en', logErrors: false, }) // Register additional locales registerLocale('fr', fr) registerLocale('es', es) registerLocale('de', de) console.log('Multi-locale setup completed') console.log('Available locales: en, fr, es, de') // Test different locales const testDate = new Date('2024-01-15T14:30:00') ;['en', 'fr', 'es', 'de'].forEach((locale) => { setLocale(locale) console.log(`${locale}: ${formatDateLocalized(testDate)}`) }) console.log('') } /** * Demo: Runtime configuration changes */ export const demoRuntimeConfiguration = () => { console.log('=== Runtime Configuration Demo ===\n') // Initialize app initializeApp({ locale: 'en', logErrors: true, }) console.log('Initial configuration:') console.log(getErrorConfig()) console.log('') // Change error handling at runtime configureErrorHandling({ logErrors: false, fallbackString: 'Runtime Changed', messages: { invalidDate: 'Runtime: Invalid date', }, }) console.log('Runtime configuration change applied:') console.log(getErrorConfig()) console.log('') } /** * Demo: Different initialization scenarios */ export const demoInitializationScenarios = () => { console.log('=== Initialization Scenarios Demo ===\n') const scenarios = [ { name: 'Arabic App', config: { locale: 'ar', logErrors: false, fallbackString: 'تاريخ غير صحيح', }, }, { name: 'French App', config: { locale: 'fr', logErrors: true, fallbackString: 'Date Invalide', messages: { invalidDate: 'Date invalide fournie', }, }, }, { name: 'Spanish App', config: { locale: 'es', logErrors: false, fallbackString: 'Fecha Inválida', messages: { invalidDate: 'Fecha inválida proporcionada', }, }, }, { name: 'German App', config: { locale: 'de', logErrors: true, fallbackString: 'Ungültiges Datum', messages: { invalidDate: 'Ungültiges Datum bereitgestellt', }, }, }, ] scenarios.forEach((scenario) => { console.log(`--- ${scenario.name} ---`) const result = initializeApp(scenario.config) console.log('Locale:', result.locale) console.log('Error Logging:', result.errorConfig.logErrors) console.log('Fallback String:', result.errorConfig.fallbackString) console.log('') }) } /** * Demo: Error handling with different configurations */ export const demoErrorHandlingScenarios = () => { console.log('=== Error Handling Scenarios Demo ===\n') const invalidDate = 'invalid-date-string' // Scenario 1: Silent error handling initializeApp({ locale: 'en', logErrors: false, fallbackString: 'Silent Error', }) console.log('Silent mode:', formatDate(invalidDate)) // Scenario 2: Verbose error handling initializeApp({ locale: 'en', logErrors: true, fallbackString: 'Verbose Error', messages: { invalidDate: 'VERBOSE: Invalid date provided', }, }) console.log('Verbose mode:', formatDate(invalidDate)) // Scenario 3: Custom fallback date initializeApp({ locale: 'en', logErrors: false, fallbackDate: new Date('2024-06-15'), fallbackString: 'Custom Fallback', }) console.log('Custom fallback:', formatDate(invalidDate)) console.log('') } /** * Demo: Real-world app initialization examples */ export const demoRealWorldExamples = () => { console.log('=== Real-World Examples Demo ===\n') // Example 1: E-commerce app console.log('E-commerce App:') initializeApp({ locale: 'en', logErrors: false, // No errors in production fallbackDate: new Date(), // Use current date strictMode: false, // Flexible date handling }) console.log(' - English locale') console.log(' - Silent error handling') console.log(' - Flexible date validation') console.log('') // Example 2: Banking app console.log('Banking App:') initializeApp({ locale: 'ar', logErrors: true, // Log errors for security fallbackString: 'تاريخ غير صحيح', strictMode: true, // Strict validation messages: { invalidDate: 'تاريخ غير صحيح - يرجى التحقق', }, }) console.log(' - Arabic locale') console.log(' - Error logging enabled') console.log(' - Strict validation') console.log('') // Example 3: Social media app console.log('Social Media App:') initializeApp({ locale: 'fr', logErrors: false, fallbackDate: new Date('2024-01-01'), fallbackString: 'Date Inconnue', messages: { invalidDate: 'Date inconnue', invalidDateNull: 'Date manquante', }, }) console.log(' - French locale') console.log(' - User-friendly error messages') console.log(' - Fixed fallback date') console.log('') } /** * Run all app initialization demos */ export const runAppInitializationDemos = () => { console.log('🚀 App Initialization Demos') console.log('===========================\n') demoBasicInitialization() demoCompleteInitialization() demoMinimalInitialization() demoCustomErrorHandling() demoProductionInitialization() demoDevelopmentInitialization() demoMultiLocaleInitialization() demoRuntimeConfiguration() demoInitializationScenarios() demoErrorHandlingScenarios() demoRealWorldExamples() console.log('✅ All app initialization demos completed!') console.log('') console.log('📋 Summary:') console.log('- Users can configure everything during app initialization') console.log('- All configuration options are optional with sensible defaults') console.log('- Error handling can be customized per app needs') console.log('- Runtime configuration changes are supported') console.log('- Multiple initialization scenarios supported') console.log('- Production and development configurations available') } /** * Quick initialization test */ export const testAppInitialization = (config = {}) => { console.log(`\n🧪 Testing app initialization with config:`, config) const result = initializeApp(config) console.log('Initialization result:', result) console.log('App initialized:', getAppInitializationStatus()) console.log('Current status:', getInitializationStatus()) return result }