timsoftdz_core 1.0.0 copy "timsoftdz_core: ^1.0.0" to clipboard
timsoftdz_core: ^1.0.0 copied to clipboard

Enterprise-grade core library for Dart & Flutter — Result pattern, unified exception hierarchy, structured logging with pipelines, interceptor-based HTTP client, contract-driven key-value storage, Uni [...]

example/main.dart

// example/main.dart
//
// Comprehensive runnable example demonstrating every major feature of
// timsoftdz_core v1.0.
//
// Run with:
//   dart example/main.dart
//
// This file showcases:
//   1.  Result<T>          — functional success/failure handling
//   2.  AppException       — full exception hierarchy
//   3.  Validation         — email, phone, password, IBAN, IPv6, NIN, Luhn
//   4.  DzPhone            — Algerian phone normaliser & carrier detection
//   5.  Logger             — ConsoleLogger, CompositeLogger, TaggedLogger,
//                           JsonLogger, FilteredLogger
//   6.  DateFormatter      — zero-dependency date formatting
//   7.  RelativeTime       — "5 minutes ago" in EN / FR
//   8.  String utilities   — all case conversions, masking, slugify, etc.
//   9.  Storage            — MemoryStorage, CachedStorage (async key-value)
//   10. HTTP client        — TimHttpClient with Result<T> API (offline demo)

// ignore_for_file: avoid_print

import 'dart:io';

import 'package:timsoftdz_core/timsoftdz_core.dart';

Future<void> main() async {
  _section('timsoftdz_core v1.0 — Feature Demo');

  _section('1. Result<T>');

  final Result<int> ok = const Success(42);
  final Result<int> fail = Failure(const AppException('oops', code: 'ERR_DEMO'));

  print('ok.isSuccess          : ${ok.isSuccess}');
  print('fail.isFailure        : ${fail.isFailure}');
  print('ok.getOrElse(0)       : ${ok.getOrElse(0)}');
  print('fail.getOrElse(0)     : ${fail.getOrElse(0)}');

  final doubled = ok.map((v) => v * 2);
  print('ok.map(x2)            : ${doubled.valueOrNull}');

  final folded = fail.fold(
    onSuccess: (v) => 'Got $v',
    onFailure: (e) => 'Error: ${e.code}',
  );
  print('fail.fold()           : $folded');

  final recovered = fail.recover((_) => -1);
  print('fail.recover(-1)      : ${recovered.valueOrNull}');

  final asyncResult = await Result.runAsync(() async {
    await Future<void>.delayed(Duration.zero);
    return 'async value';
  });
  print('Result.runAsync       : ${asyncResult.valueOrNull}');

  final guardResult = Result.guard(() => int.parse('not_a_number'));
  print('Result.guard(bad int) : ${guardResult.isFailure}');

  _section('2. Exception Hierarchy');

  void showException(AppException e) {
    print('  ${e.runtimeType}: [${e.code}] ${e.message}');
  }

  showException(const AppException('Generic failure'));
  showException(const ValidationException('Email invalid', code: ErrorCode.invalidEmail));
  showException(const NetworkException('HTTP 503', statusCode: 503));
  showException(const TimeoutException());
  showException(const UnauthorizedException());
  showException(const ForbiddenException());
  showException(const NotFoundException());
  showException(const ConflictException());
  showException(const RateLimitedException());
  showException(const StorageException('Disk full', code: ErrorCode.storageWrite));
  showException(const ParseException('Invalid JSON'));
  showException(const CancelledException());

  final wrapped = AppException.fromError(Exception('raw dart exception'));
  print('  Wrapped: ${wrapped.message}');

  _section('3. Validation');

  print('isEmail (valid)       : ${Validator.isEmail('user@timsoft.dz')}');
  print('isEmail (invalid)     : ${Validator.isEmail('notanemail')}');

  final emailResult = Validator.validateEmail('  admin@example.com  ');
  emailResult.onSuccess((e) => print('validateEmail OK      : $e'));

  print('isPhone (+12025..)    : ${Validator.isPhone('+12025551234')}');

  print('isAlgerianPhone 055.. : ${Validator.isAlgerianPhone('0551234567')}');
  print('isAlgerianPhone 077.. : ${Validator.isAlgerianPhone('0771234567')}');
  print('normalisePhone 055..  : ${Validator.normalizeAlgerianPhone('0551234567')}');

  print('strength(P@ssw0rd!)   : ${Validator.passwordStrength('P@ssw0rd!')}');
  print('strength(password)    : ${Validator.passwordStrength('password')}');

  Validator.validatePassword('StrongPass1')
      .onSuccess((_) => print('validatePassword OK   : pass'))
      .onFailure((e) => print('validatePassword FAIL : ${e.message}'));

  print('isUrl (https)         : ${Validator.isUrl('https://timsoft.dz')}');
  print('isUrl (ftp)           : ${Validator.isUrl('ftp://files.com')}');

  print('isIPv4 (192.168.1.1)  : ${Validator.isIPv4('192.168.1.1')}');
  print('isIPv6 (::1)          : ${Validator.isIPv6('::1')}');
  print('isIPv6 (2001:db8::1)  : ${Validator.isIPv6('2001:db8::1')}');
  print('isIP   (::1)          : ${Validator.isIP('::1')}');

  print('isIBAN GB29..         : ${Validator.isIBAN('GB29NWBK60161331926819')}');
  print('isIBAN DE89..         : ${Validator.isIBAN('DE89370400440532013000')}');
  print('isIBAN (bad)          : ${Validator.isIBAN('XX00000000000000')}');

  print('isCC Visa test        : ${Validator.isValidCreditCard('4532015112830366')}');
  print('isCC invalid          : ${Validator.isValidCreditCard('1234567890123456')}');

  print('isNIN (18 digits)     : ${Validator.isAlgerianNIN('123456789012345678')}');

  print('isSlug hello-world    : ${Validator.isSlug('hello-world')}');
  print('isHexColor #1A2B3C    : ${Validator.isHexColor('#1A2B3C')}');
  print('isJsonString valid    : ${Validator.isJsonString('{"key":"val"}')}');

  _section('4. DzPhone');

  const phone = '0551234567';
  print('DzPhone.isValid       : ${DzPhone.isValid(phone)}');
  print('DzPhone.normalize     : ${DzPhone.normalize(phone)}');
  print('DzPhone.carrier       : ${DzPhone.carrier(phone)}');
  print('DzPhone.toLocal       : ${DzPhone.toLocal('+213551234567')}');
  print('DzPhone.toDisplay     : ${DzPhone.toDisplay(phone)}');

  _section('5. Logger');

  final console = ConsoleLogger(
    minLevel: LogLevel.trace,
    showTimestamp: true,
    showLevel: true,
  );

  console.trace('Ultra-verbose diagnostic', tag: 'Boot');
  console.debug('Initialising services', tag: 'Boot');
  console.info('Server started on port 8080', tag: 'App');
  console.success('Database connected', tag: 'DB');
  console.warning('Memory usage above 80 %', tag: 'Monitor');
  console.error('Request failed', tag: 'HTTP', error: Exception('timeout'));
  console.fatal('Unrecoverable state', tag: 'App');

  final authLog = TaggedLogger(console, 'AuthService');
  authLog.info('User signed in: user@timsoft.dz');

  final filtered = FilteredLogger(
    delegate: console,
    filter: const MinLevelFilter(LogLevel.warning),
  );
  filtered.debug('suppressed by filter');
  filtered.warning('this reaches console');

  final jsonLog = JsonLogger(
    sink: stdout,
    minLevel: LogLevel.info,
    prettyPrint: false,
  );
  jsonLog.info('Payment processed', tag: 'Billing');
  jsonLog.error('Payment failed', tag: 'Billing', error: Exception('card declined'));

  final multi = CompositeLogger([SilentLogger(), SilentLogger()]);
  multi.info('Goes to all sinks');

  _section('6. DateFormatter');

  final now = DateTime(2026, 3, 15, 14, 30, 5);
  print('isoDate               : ${DateFormatter.isoDate(now)}');
  print('isoTime               : ${DateFormatter.isoTime(now)}');
  print('isoDateTime           : ${DateFormatter.isoDateTime(now)}');

  _section('7. RelativeTime');

  final fiveMinAgo = DateTime.now().subtract(const Duration(minutes: 5));
  print('5m ago (en)           : ${RelativeTime.from(fiveMinAgo)}');

  _section('8. String Utilities');

  print('capitalize            : ${'hello world'.capitalize()}');
  print('slugify               : ${'Hello World 2026!'.slugify()}');

  _section('9. Storage');

  final mem = MemoryStorage({'lang': 'en'});
  await mem.set('theme', 'dark');
  print('mem.get(lang)         : ${(await mem.get('lang')).valueOrNull}');

  _section('10. HTTP Client');

  final client = TimHttpClient(baseUrl: 'https://api.timsoft.dz');
  print('client created        : ${client.baseUrl}');
  client.close();

  _section('Demo complete');
}

void _section(String title) {
  print('\n${'─' * 56}');
  print(' $title');
  print('${'─' * 56}');
}
4
likes
150
points
104
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Enterprise-grade core library for Dart & Flutter — Result pattern, unified exception hierarchy, structured logging with pipelines, interceptor-based HTTP client, contract-driven key-value storage, Unicode-safe string utilities, comprehensive validation (Algerian phone, Luhn, IBAN, IPv6), and zero-intl date/time formatting. Pub.dev 160+ score target. v1.0 production-ready.

Homepage
Repository (GitHub)
View/report issues

Topics

#utilities #networking #validation #logging #storage

License

MIT (license)

Dependencies

http

More

Packages that depend on timsoftdz_core