From 92de4dcdd7149868c83eb7a0dd5e8d526a133412 Mon Sep 17 00:00:00 2001 From: Divyanshu Bhargava Date: Thu, 12 Jun 2025 22:31:00 +0530 Subject: [PATCH 1/5] feat: extract logging functionality into separate stac_logger package --- examples/counter_example/pubspec.lock | 7 +++ .../counter_example/pubspec_overrides.yaml | 4 +- examples/movie_app/pubspec.lock | 7 +++ examples/movie_app/pubspec_overrides.yaml | 4 +- examples/stac_gallery/pubspec.lock | 7 +++ examples/stac_gallery/pubspec_overrides.yaml | 4 +- packages/stac/lib/src/framework/stac.dart | 2 +- .../stac/lib/src/framework/stac_registry.dart | 2 +- .../stac_network_request_parser.dart | 4 +- ...t_bottom_navigation_controller_parser.dart | 2 +- .../stac_dynamic_view_parser.dart | 2 +- .../widgets/stac_form/stac_form_scope.dart | 2 +- .../widgets/stac_icon/stac_icon_parser.dart | 2 +- .../stac_radio_group_scope.dart | 2 +- .../stac_text_form_field_parser.dart | 2 +- .../stac/lib/src/utils/input_formatters.dart | 2 +- packages/stac/lib/src/utils/log.dart | 12 ---- packages/stac/pubspec.yaml | 1 + packages/stac/pubspec_overrides.yaml | 4 +- packages/stac_logger/.gitignore | 31 ++++++++++ packages/stac_logger/.metadata | 10 +++ packages/stac_logger/CHANGELOG.md | 7 +++ packages/stac_logger/LICENSE | 21 +++++++ packages/stac_logger/README.md | 54 ++++++++++++++++ packages/stac_logger/analysis_options.yaml | 4 ++ packages/stac_logger/lib/src/log.dart | 23 +++++++ .../stac_logger/lib/src/log_interface.dart | 14 +++++ packages/stac_logger/lib/src/log_io.dart | 26 ++++++++ packages/stac_logger/lib/src/log_web.dart | 40 ++++++++++++ packages/stac_logger/lib/stac_logger.dart | 3 + packages/stac_logger/pubspec.yaml | 61 +++++++++++++++++++ 31 files changed, 339 insertions(+), 27 deletions(-) delete mode 100644 packages/stac/lib/src/utils/log.dart create mode 100644 packages/stac_logger/.gitignore create mode 100644 packages/stac_logger/.metadata create mode 100644 packages/stac_logger/CHANGELOG.md create mode 100644 packages/stac_logger/LICENSE create mode 100644 packages/stac_logger/README.md create mode 100644 packages/stac_logger/analysis_options.yaml create mode 100644 packages/stac_logger/lib/src/log.dart create mode 100644 packages/stac_logger/lib/src/log_interface.dart create mode 100644 packages/stac_logger/lib/src/log_io.dart create mode 100644 packages/stac_logger/lib/src/log_web.dart create mode 100644 packages/stac_logger/lib/stac_logger.dart create mode 100644 packages/stac_logger/pubspec.yaml diff --git a/examples/counter_example/pubspec.lock b/examples/counter_example/pubspec.lock index f49ef922..9294f043 100644 --- a/examples/counter_example/pubspec.lock +++ b/examples/counter_example/pubspec.lock @@ -734,6 +734,13 @@ packages: relative: true source: path version: "0.3.0" + stac_logger: + dependency: "direct overridden" + description: + path: "../../packages/stac_logger" + relative: true + source: path + version: "1.0.0" stack_trace: dependency: transitive description: diff --git a/examples/counter_example/pubspec_overrides.yaml b/examples/counter_example/pubspec_overrides.yaml index bb35d5b9..bea7478c 100644 --- a/examples/counter_example/pubspec_overrides.yaml +++ b/examples/counter_example/pubspec_overrides.yaml @@ -1,6 +1,8 @@ -# melos_managed_dependency_overrides: stac,stac_framework +# melos_managed_dependency_overrides: stac,stac_framework,stac_logger dependency_overrides: stac: path: ../../packages/stac stac_framework: path: ../../packages/stac_framework + stac_logger: + path: ../../packages/stac_logger diff --git a/examples/movie_app/pubspec.lock b/examples/movie_app/pubspec.lock index d516b37f..af767377 100644 --- a/examples/movie_app/pubspec.lock +++ b/examples/movie_app/pubspec.lock @@ -454,6 +454,13 @@ packages: relative: true source: path version: "0.3.0" + stac_logger: + dependency: "direct overridden" + description: + path: "../../packages/stac_logger" + relative: true + source: path + version: "1.0.0" stack_trace: dependency: transitive description: diff --git a/examples/movie_app/pubspec_overrides.yaml b/examples/movie_app/pubspec_overrides.yaml index bb35d5b9..bea7478c 100644 --- a/examples/movie_app/pubspec_overrides.yaml +++ b/examples/movie_app/pubspec_overrides.yaml @@ -1,6 +1,8 @@ -# melos_managed_dependency_overrides: stac,stac_framework +# melos_managed_dependency_overrides: stac,stac_framework,stac_logger dependency_overrides: stac: path: ../../packages/stac stac_framework: path: ../../packages/stac_framework + stac_logger: + path: ../../packages/stac_logger diff --git a/examples/stac_gallery/pubspec.lock b/examples/stac_gallery/pubspec.lock index 4770afeb..1499e42f 100644 --- a/examples/stac_gallery/pubspec.lock +++ b/examples/stac_gallery/pubspec.lock @@ -734,6 +734,13 @@ packages: relative: true source: path version: "0.3.0" + stac_logger: + dependency: "direct overridden" + description: + path: "../../packages/stac_logger" + relative: true + source: path + version: "1.0.0" stac_webview: dependency: "direct main" description: diff --git a/examples/stac_gallery/pubspec_overrides.yaml b/examples/stac_gallery/pubspec_overrides.yaml index eaa0c70a..3770b035 100644 --- a/examples/stac_gallery/pubspec_overrides.yaml +++ b/examples/stac_gallery/pubspec_overrides.yaml @@ -1,8 +1,10 @@ -# melos_managed_dependency_overrides: stac,stac_framework,stac_webview +# melos_managed_dependency_overrides: stac,stac_framework,stac_webview,stac_logger dependency_overrides: stac: path: ../../packages/stac stac_framework: path: ../../packages/stac_framework + stac_logger: + path: ../../packages/stac_logger stac_webview: path: ../../packages/stac_webview diff --git a/packages/stac/lib/src/framework/stac.dart b/packages/stac/lib/src/framework/stac.dart index e7a5799a..6bd5cbf7 100644 --- a/packages/stac/lib/src/framework/stac.dart +++ b/packages/stac/lib/src/framework/stac.dart @@ -10,10 +10,10 @@ import 'package:stac/src/parsers/parsers.dart'; import 'package:stac/src/parsers/widgets/stac_inkwell/stac_inkwell_parser.dart'; import 'package:stac/src/parsers/widgets/stac_set_value/stac_set_value_parser.dart'; import 'package:stac/src/services/stac_network_service.dart'; -import 'package:stac/src/utils/log.dart'; import 'package:stac/src/utils/variable_resolver.dart'; import 'package:stac/src/utils/widget_type.dart'; import 'package:stac_framework/stac_framework.dart'; +import 'package:stac_logger/stac_logger.dart'; typedef ErrorWidgetBuilder = Widget Function( BuildContext context, diff --git a/packages/stac/lib/src/framework/stac_registry.dart b/packages/stac/lib/src/framework/stac_registry.dart index f393554e..5f951ec0 100644 --- a/packages/stac/lib/src/framework/stac_registry.dart +++ b/packages/stac/lib/src/framework/stac_registry.dart @@ -1,4 +1,4 @@ -import 'package:stac/src/utils/log.dart'; +import 'package:stac_logger/stac_logger.dart'; import 'package:stac_framework/stac_framework.dart'; class StacRegistry { diff --git a/packages/stac/lib/src/parsers/actions/stac_network_request/stac_network_request_parser.dart b/packages/stac/lib/src/parsers/actions/stac_network_request/stac_network_request_parser.dart index d1fbd23b..03c98cd1 100644 --- a/packages/stac/lib/src/parsers/actions/stac_network_request/stac_network_request_parser.dart +++ b/packages/stac/lib/src/parsers/actions/stac_network_request/stac_network_request_parser.dart @@ -2,12 +2,12 @@ import 'dart:async'; import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; -import 'package:stac/src/parsers/actions/stac_network_request/stac_network_request.dart'; import 'package:stac/src/framework/framework.dart'; +import 'package:stac/src/parsers/actions/stac_network_request/stac_network_request.dart'; import 'package:stac/src/services/stac_network_service.dart'; import 'package:stac/src/utils/action_type.dart'; -import 'package:stac/src/utils/log.dart'; import 'package:stac_framework/stac_framework.dart'; +import 'package:stac_logger/stac_logger.dart'; class StacNetworkRequestParser extends StacActionParser { const StacNetworkRequestParser(); diff --git a/packages/stac/lib/src/parsers/widgets/stac_default_bottom_navigation_controller/stac_default_bottom_navigation_controller_parser.dart b/packages/stac/lib/src/parsers/widgets/stac_default_bottom_navigation_controller/stac_default_bottom_navigation_controller_parser.dart index 8a197170..ebc1d6bb 100644 --- a/packages/stac/lib/src/parsers/widgets/stac_default_bottom_navigation_controller/stac_default_bottom_navigation_controller_parser.dart +++ b/packages/stac/lib/src/parsers/widgets/stac_default_bottom_navigation_controller/stac_default_bottom_navigation_controller_parser.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; import 'package:stac/src/framework/framework.dart'; import 'package:stac/src/parsers/widgets/stac_default_bottom_navigation_controller/stac_default_bottom_navigation_controller.dart'; -import 'package:stac/src/utils/log.dart'; import 'package:stac/src/utils/widget_type.dart'; import 'package:stac_framework/stac_framework.dart'; +import 'package:stac_logger/stac_logger.dart'; class StacDefaultBottomNavigationControllerParser extends StacParser { diff --git a/packages/stac/lib/src/parsers/widgets/stac_dynamic_view/stac_dynamic_view_parser.dart b/packages/stac/lib/src/parsers/widgets/stac_dynamic_view/stac_dynamic_view_parser.dart index 2cfb7d6e..2d257faa 100644 --- a/packages/stac/lib/src/parsers/widgets/stac_dynamic_view/stac_dynamic_view_parser.dart +++ b/packages/stac/lib/src/parsers/widgets/stac_dynamic_view/stac_dynamic_view_parser.dart @@ -5,9 +5,9 @@ import 'package:flutter/material.dart'; import 'package:stac/src/framework/framework.dart'; import 'package:stac/src/parsers/widgets/stac_dynamic_view/stac_dynamic_view.dart'; import 'package:stac/src/services/stac_network_service.dart'; -import 'package:stac/src/utils/log.dart'; import 'package:stac/src/utils/widget_type.dart'; import 'package:stac_framework/stac_framework.dart'; +import 'package:stac_logger/stac_logger.dart'; class StacDynamicViewParser extends StacParser { const StacDynamicViewParser(); diff --git a/packages/stac/lib/src/parsers/widgets/stac_form/stac_form_scope.dart b/packages/stac/lib/src/parsers/widgets/stac_form/stac_form_scope.dart index 1ae23fdc..69914464 100644 --- a/packages/stac/lib/src/parsers/widgets/stac_form/stac_form_scope.dart +++ b/packages/stac/lib/src/parsers/widgets/stac_form/stac_form_scope.dart @@ -1,5 +1,5 @@ import 'package:flutter/cupertino.dart'; -import 'package:stac/src/utils/log.dart'; +import 'package:stac_logger/stac_logger.dart'; class StacFormScope extends InheritedWidget { const StacFormScope({ diff --git a/packages/stac/lib/src/parsers/widgets/stac_icon/stac_icon_parser.dart b/packages/stac/lib/src/parsers/widgets/stac_icon/stac_icon_parser.dart index 724b2bbc..018f810b 100644 --- a/packages/stac/lib/src/parsers/widgets/stac_icon/stac_icon_parser.dart +++ b/packages/stac/lib/src/parsers/widgets/stac_icon/stac_icon_parser.dart @@ -2,9 +2,9 @@ import 'package:flutter/cupertino.dart'; import 'package:stac/src/parsers/widgets/stac_double/stac_double.dart'; import 'package:stac/src/utils/color_utils.dart'; import 'package:stac/src/utils/icon_utils.dart'; -import 'package:stac/src/utils/log.dart'; import 'package:stac/src/utils/widget_type.dart'; import 'package:stac_framework/stac_framework.dart'; +import 'package:stac_logger/stac_logger.dart'; import 'stac_icon.dart'; diff --git a/packages/stac/lib/src/parsers/widgets/stac_radio_group/stac_radio_group_scope.dart b/packages/stac/lib/src/parsers/widgets/stac_radio_group/stac_radio_group_scope.dart index cf0148bd..533e9865 100644 --- a/packages/stac/lib/src/parsers/widgets/stac_radio_group/stac_radio_group_scope.dart +++ b/packages/stac/lib/src/parsers/widgets/stac_radio_group/stac_radio_group_scope.dart @@ -1,5 +1,5 @@ import 'package:flutter/widgets.dart'; -import 'package:stac/src/utils/log.dart'; +import 'package:stac_logger/stac_logger.dart'; class StacRadioGroupScope extends InheritedWidget { const StacRadioGroupScope({ diff --git a/packages/stac/lib/src/parsers/widgets/stac_text_form_field/stac_text_form_field_parser.dart b/packages/stac/lib/src/parsers/widgets/stac_text_form_field/stac_text_form_field_parser.dart index ae71e35c..3e4e1f83 100644 --- a/packages/stac/lib/src/parsers/widgets/stac_text_form_field/stac_text_form_field_parser.dart +++ b/packages/stac/lib/src/parsers/widgets/stac_text_form_field/stac_text_form_field_parser.dart @@ -3,9 +3,9 @@ import 'package:stac/src/parsers/parsers.dart'; import 'package:stac/src/parsers/widgets/stac_double/stac_double.dart'; import 'package:stac/src/utils/color_utils.dart'; import 'package:stac/src/utils/input_validations.dart'; -import 'package:stac/src/utils/log.dart'; import 'package:stac/src/utils/widget_type.dart'; import 'package:stac_framework/stac_framework.dart'; +import 'package:stac_logger/stac_logger.dart'; class StacTextFormFieldParser extends StacParser { const StacTextFormFieldParser(); diff --git a/packages/stac/lib/src/utils/input_formatters.dart b/packages/stac/lib/src/utils/input_formatters.dart index 0b206d65..2bc3ff15 100644 --- a/packages/stac/lib/src/utils/input_formatters.dart +++ b/packages/stac/lib/src/utils/input_formatters.dart @@ -1,5 +1,5 @@ import 'package:flutter/services.dart'; -import 'package:stac/src/utils/log.dart'; +import 'package:stac_logger/stac_logger.dart'; enum InputFormatterType { allow, diff --git a/packages/stac/lib/src/utils/log.dart b/packages/stac/lib/src/utils/log.dart deleted file mode 100644 index e39b1b4d..00000000 --- a/packages/stac/lib/src/utils/log.dart +++ /dev/null @@ -1,12 +0,0 @@ -import 'package:logger/logger.dart'; - -class Log { - const Log._(); - - static final _log = Logger(); - - static void d(dynamic message) => _log.d(message); - static void i(dynamic message) => _log.i(message); - static void w(dynamic message) => _log.w(message); - static void e(dynamic message) => _log.e(message); -} diff --git a/packages/stac/pubspec.yaml b/packages/stac/pubspec.yaml index bee544e0..d5dca22a 100644 --- a/packages/stac/pubspec.yaml +++ b/packages/stac/pubspec.yaml @@ -23,6 +23,7 @@ dependencies: stac_framework: ^0.3.0 cached_network_image: ^3.4.1 flutter_svg: ^2.1.0 + stac_logger: ^1.0.0 dev_dependencies: flutter_test: diff --git a/packages/stac/pubspec_overrides.yaml b/packages/stac/pubspec_overrides.yaml index f2bee052..60c0b6b8 100644 --- a/packages/stac/pubspec_overrides.yaml +++ b/packages/stac/pubspec_overrides.yaml @@ -1,4 +1,6 @@ -# melos_managed_dependency_overrides: stac_framework +# melos_managed_dependency_overrides: stac_framework,stac_logger dependency_overrides: stac_framework: path: ../stac_framework + stac_logger: + path: ../stac_logger diff --git a/packages/stac_logger/.gitignore b/packages/stac_logger/.gitignore new file mode 100644 index 00000000..eb6c05cd --- /dev/null +++ b/packages/stac_logger/.gitignore @@ -0,0 +1,31 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. +/pubspec.lock +**/doc/api/ +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +build/ diff --git a/packages/stac_logger/.metadata b/packages/stac_logger/.metadata new file mode 100644 index 00000000..231eccaf --- /dev/null +++ b/packages/stac_logger/.metadata @@ -0,0 +1,10 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: "b25305a8832cfc6ba632a7f87ad455e319dccce8" + channel: "stable" + +project_type: package diff --git a/packages/stac_logger/CHANGELOG.md b/packages/stac_logger/CHANGELOG.md new file mode 100644 index 00000000..b3a5ae2e --- /dev/null +++ b/packages/stac_logger/CHANGELOG.md @@ -0,0 +1,7 @@ +## 1.0.0 + +* Initial release of the stac_logger package +* Platform-agnostic logging implementation with WASM compatibility +* Conditional imports for platform-specific implementations +* Support for debug, info, warning, and error log levels +* No dart:io dependency for web/WASM compatibility diff --git a/packages/stac_logger/LICENSE b/packages/stac_logger/LICENSE new file mode 100644 index 00000000..bdc7bbd7 --- /dev/null +++ b/packages/stac_logger/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 Stac + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/stac_logger/README.md b/packages/stac_logger/README.md new file mode 100644 index 00000000..ba8097bd --- /dev/null +++ b/packages/stac_logger/README.md @@ -0,0 +1,54 @@ +# STAC Logger + +A lightweight and reusable logging utility for the Stac framework. It switches between implementations—using Flutter's debugPrint on web/WASM platforms and the robust logger package on native platforms—ensuring optimal performance and compatibility across all environments. + + +## Getting started + +Add the package to your `pubspec.yaml`: + +```yaml +dependencies: + stac_logger: ^1.0.0 +``` + +Then run: + +```bash +flutter pub get +``` + +## Usage + +Import the package and use the `Log` class to log messages: + +```dart +import 'package:stac_logger/stac_logger.dart'; + +void main() { + // Log a debug message + Log.d('Debug message'); + + // Log an info message + Log.i('Info message'); + + // Log a warning message + Log.w('Warning message'); + + // Log an error message + Log.e('Error message'); +} +``` + +## Implementation Details + +This package uses conditional imports to select the appropriate logging implementation based on the platform: + +- On native platforms (iOS, Android, desktop), it uses a full-featured logger implementation +- On web/WASM platforms, it uses a simplified implementation compatible with those environments + +The conditional import approach ensures that no `dart:io` code is included in web/WASM builds, making the package fully compatible with WebAssembly. + +## Additional information + +This package is part of the Stac framework ecosystem and is designed to provide logging functionality that works across all platforms, including WASM environments diff --git a/packages/stac_logger/analysis_options.yaml b/packages/stac_logger/analysis_options.yaml new file mode 100644 index 00000000..a5744c1c --- /dev/null +++ b/packages/stac_logger/analysis_options.yaml @@ -0,0 +1,4 @@ +include: package:flutter_lints/flutter.yaml + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/packages/stac_logger/lib/src/log.dart b/packages/stac_logger/lib/src/log.dart new file mode 100644 index 00000000..e9933802 --- /dev/null +++ b/packages/stac_logger/lib/src/log.dart @@ -0,0 +1,23 @@ +// Import the interface +import 'package:stac_logger/src/log_interface.dart'; + +// Use conditional imports - this is the cleanest approach for WASM compatibility +import 'log_io.dart' // Default implementation for non-web platforms + if (dart.library.html) 'log_web.dart'; // Web/WASM implementation + +class Log { + const Log._(); + + // Get the logger instance directly from the conditionally imported file + // The compiler will select the appropriate implementation at compile time + static final LogInterface _logger = createLogger(); + + + static void d(dynamic message) => _logger.d(message); + + static void i(dynamic message) => _logger.i(message); + + static void w(dynamic message) => _logger.w(message); + + static void e(dynamic message) => _logger.e(message); +} \ No newline at end of file diff --git a/packages/stac_logger/lib/src/log_interface.dart b/packages/stac_logger/lib/src/log_interface.dart new file mode 100644 index 00000000..12e4ac22 --- /dev/null +++ b/packages/stac_logger/lib/src/log_interface.dart @@ -0,0 +1,14 @@ +/// Abstract interface for logging functionality +abstract class LogInterface { + /// Log a debug message + void d(dynamic message); + + /// Log an info message + void i(dynamic message); + + /// Log a warning message + void w(dynamic message); + + /// Log an error message + void e(dynamic message); +} diff --git a/packages/stac_logger/lib/src/log_io.dart b/packages/stac_logger/lib/src/log_io.dart new file mode 100644 index 00000000..02ccddf9 --- /dev/null +++ b/packages/stac_logger/lib/src/log_io.dart @@ -0,0 +1,26 @@ +import 'package:logger/logger.dart'; +import 'log_interface.dart'; + +LogInterface createLogger() => LogIO.instance; + +/// IO-based implementation of LogInterface +class LogIO implements LogInterface { + LogIO._(); + + static final LogIO _instance = LogIO._(); + static LogIO get instance => _instance; + + final _log = Logger(); + + @override + void d(dynamic message) => _log.d(message); + + @override + void i(dynamic message) => _log.i(message); + + @override + void w(dynamic message) => _log.w(message); + + @override + void e(dynamic message) => _log.e(message); +} diff --git a/packages/stac_logger/lib/src/log_web.dart b/packages/stac_logger/lib/src/log_web.dart new file mode 100644 index 00000000..bd2057b2 --- /dev/null +++ b/packages/stac_logger/lib/src/log_web.dart @@ -0,0 +1,40 @@ +import 'package:flutter/foundation.dart'; +import 'package:stac_logger/src/log_interface.dart'; + +LogInterface createLogger() => LogWeb.instance; + +/// Web/WASM-compatible implementation of LogInterface +class LogWeb implements LogInterface { + LogWeb._(); + + static final LogWeb _instance = LogWeb._(); + static LogWeb get instance => _instance; + + @override + void d(dynamic message) { + if (kDebugMode) { + debugPrint('[DEBUG] $message'); + } + } + + @override + void i(dynamic message) { + if (kDebugMode) { + debugPrint('[INFO] $message'); + } + } + + @override + void w(dynamic message) { + if (kDebugMode) { + debugPrint('[WARNING] $message'); + } + } + + @override + void e(dynamic message) { + if (kDebugMode) { + debugPrint('[ERROR] $message'); + } + } +} diff --git a/packages/stac_logger/lib/stac_logger.dart b/packages/stac_logger/lib/stac_logger.dart new file mode 100644 index 00000000..6b3e5d1d --- /dev/null +++ b/packages/stac_logger/lib/stac_logger.dart @@ -0,0 +1,3 @@ +library; + +export 'src/log.dart'; diff --git a/packages/stac_logger/pubspec.yaml b/packages/stac_logger/pubspec.yaml new file mode 100644 index 00000000..0dafcd04 --- /dev/null +++ b/packages/stac_logger/pubspec.yaml @@ -0,0 +1,61 @@ +name: stac_logger +description: "A platform-agnostic logging package for Dart and Flutter with WASM compatibility." +version: 1.0.0 +homepage: https://github.com/divyanshub024/stac +repository: https://github.com/divyanshub024/stac/tree/main/packages/stac_logger + +topics: + - logging + - wasm + - flutter + +environment: + sdk: ^3.8.1 + flutter: ">=1.17.0" + +dependencies: + flutter: + sdk: flutter + logger: ^2.5.0 + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^5.0.0 + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter packages. +flutter: + + # To add assets to your package, add an assets section, like this: + # assets: + # - images/a_dot_burr.jpeg + # - images/a_dot_ham.jpeg + # + # For details regarding assets in packages, see + # https://flutter.dev/to/asset-from-package + # + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/to/resolution-aware-images + + # To add custom fonts to your package, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts in packages, see + # https://flutter.dev/to/font-from-package From 15dd180a98071c16ca1bf455e7669d546621ee5e Mon Sep 17 00:00:00 2001 From: Divyanshu Bhargava Date: Thu, 12 Jun 2025 22:37:29 +0530 Subject: [PATCH 2/5] docs: update package metadata and description for stac_logger --- packages/stac_logger/pubspec.yaml | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/packages/stac_logger/pubspec.yaml b/packages/stac_logger/pubspec.yaml index 0dafcd04..a155e8f1 100644 --- a/packages/stac_logger/pubspec.yaml +++ b/packages/stac_logger/pubspec.yaml @@ -1,13 +1,8 @@ name: stac_logger -description: "A platform-agnostic logging package for Dart and Flutter with WASM compatibility." +description: A lightweight and reusable logging utility for the Stac framework. version: 1.0.0 -homepage: https://github.com/divyanshub024/stac -repository: https://github.com/divyanshub024/stac/tree/main/packages/stac_logger - -topics: - - logging - - wasm - - flutter +homepage: https://github.com/StacDev/stac +repository: https://github.com/StacDev/stac/tree/dev/packages/stac_logger environment: sdk: ^3.8.1 From c91b52d3fb980be8e0e171f1994ebd3a0fc0c956 Mon Sep 17 00:00:00 2001 From: Divyanshu Bhargava Date: Thu, 12 Jun 2025 22:38:57 +0530 Subject: [PATCH 3/5] chore: update changelog to remove implementation details --- packages/stac_logger/CHANGELOG.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/stac_logger/CHANGELOG.md b/packages/stac_logger/CHANGELOG.md index b3a5ae2e..fa024b4d 100644 --- a/packages/stac_logger/CHANGELOG.md +++ b/packages/stac_logger/CHANGELOG.md @@ -1,7 +1,3 @@ ## 1.0.0 -* Initial release of the stac_logger package -* Platform-agnostic logging implementation with WASM compatibility -* Conditional imports for platform-specific implementations -* Support for debug, info, warning, and error log levels -* No dart:io dependency for web/WASM compatibility +* Initial release of the stac_logger package \ No newline at end of file From 2685673ee023bed0339924ac28da7b23f4ee2da6 Mon Sep 17 00:00:00 2001 From: Divyanshu Bhargava Date: Thu, 12 Jun 2025 22:39:44 +0530 Subject: [PATCH 4/5] style: remove unnecessary newline in logger implementation --- packages/stac_logger/lib/src/log.dart | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/stac_logger/lib/src/log.dart b/packages/stac_logger/lib/src/log.dart index e9933802..c496d681 100644 --- a/packages/stac_logger/lib/src/log.dart +++ b/packages/stac_logger/lib/src/log.dart @@ -12,7 +12,6 @@ class Log { // The compiler will select the appropriate implementation at compile time static final LogInterface _logger = createLogger(); - static void d(dynamic message) => _logger.d(message); static void i(dynamic message) => _logger.i(message); @@ -20,4 +19,4 @@ class Log { static void w(dynamic message) => _logger.w(message); static void e(dynamic message) => _logger.e(message); -} \ No newline at end of file +} From f02d179750239b971a9c613a58acf2397b62cdc1 Mon Sep 17 00:00:00 2001 From: Divyanshu Bhargava Date: Thu, 12 Jun 2025 22:44:19 +0530 Subject: [PATCH 5/5] docs: add method documentation and clean up logger implementation --- packages/stac_logger/README.md | 3 +-- packages/stac_logger/lib/src/log.dart | 6 ++++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/stac_logger/README.md b/packages/stac_logger/README.md index ba8097bd..995830bb 100644 --- a/packages/stac_logger/README.md +++ b/packages/stac_logger/README.md @@ -1,8 +1,7 @@ -# STAC Logger +# Stac Logger A lightweight and reusable logging utility for the Stac framework. It switches between implementations—using Flutter's debugPrint on web/WASM platforms and the robust logger package on native platforms—ensuring optimal performance and compatibility across all environments. - ## Getting started Add the package to your `pubspec.yaml`: diff --git a/packages/stac_logger/lib/src/log.dart b/packages/stac_logger/lib/src/log.dart index c496d681..aff9b91a 100644 --- a/packages/stac_logger/lib/src/log.dart +++ b/packages/stac_logger/lib/src/log.dart @@ -1,7 +1,5 @@ -// Import the interface import 'package:stac_logger/src/log_interface.dart'; -// Use conditional imports - this is the cleanest approach for WASM compatibility import 'log_io.dart' // Default implementation for non-web platforms if (dart.library.html) 'log_web.dart'; // Web/WASM implementation @@ -12,11 +10,15 @@ class Log { // The compiler will select the appropriate implementation at compile time static final LogInterface _logger = createLogger(); + /// Logs a debug message static void d(dynamic message) => _logger.d(message); + /// Logs an info message static void i(dynamic message) => _logger.i(message); + /// Logs a warning message static void w(dynamic message) => _logger.w(message); + /// Logs an error message static void e(dynamic message) => _logger.e(message); }