From 8bd160232c9f58b7744ecf272960fcb6c569c865 Mon Sep 17 00:00:00 2001 From: Ninja Date: Fri, 13 Mar 2026 20:32:11 +0000 Subject: [PATCH 1/2] - release v2.1.0 --- Images/parser-icon.png | Bin 0 -> 19517 bytes README.md | 2 +- src/Parsley/Parsley.csproj | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 Images/parser-icon.png diff --git a/Images/parser-icon.png b/Images/parser-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b541cd3cf94eaf7b05ff7a552d435e28554f2cf8 GIT binary patch literal 19517 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 9f73434..27b6ecb 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# ninja Parsley.Net v2.0.0 +# ninja Parsley.Net v2.0.1 [![NuGet version](https://badge.fury.io/nu/Parsley.Net.svg)](https://badge.fury.io/nu/Parsley.Net) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/CodeShayk/Parsley.Net/blob/master/LICENSE.md) [![GitHub Release](https://img.shields.io/github/v/release/CodeShayk/Parsley.Net?logo=github&sort=semver)](https://github.com/CodeShayk/Parsley.Net/releases/latest) [![master-build](https://github.com/CodeShayk/parsley.net/actions/workflows/Master-Build.yml/badge.svg)](https://github.com/CodeShayk/parsley.net/actions/workflows/Master-Build.yml) diff --git a/src/Parsley/Parsley.csproj b/src/Parsley/Parsley.csproj index f692165..85a4a20 100644 --- a/src/Parsley/Parsley.csproj +++ b/src/Parsley/Parsley.csproj @@ -1,7 +1,7 @@  - net462;netstandard2.0;netstandard2.1;net9.0 + net462;netstandard2.0;netstandard2.1;net9.0;net10.0 disable Parsley.Net CodeShayk From 125fd15bb2886601f27f4c65e95446cf2665aa31 Mon Sep 17 00:00:00 2001 From: Ninja Date: Fri, 13 Mar 2026 20:50:18 +0000 Subject: [PATCH 2/2] - Release v2.1.0 --- GitVersion.yml | 2 +- LICENSE | 2 +- README.md | 3 +- src/Parsley/Parsley.csproj | 153 +++---------------------------------- 4 files changed, 15 insertions(+), 145 deletions(-) diff --git a/GitVersion.yml b/GitVersion.yml index 280505f..3887c18 100644 --- a/GitVersion.yml +++ b/GitVersion.yml @@ -1,4 +1,4 @@ -next-version: 2.0.0 +next-version: 2.1.0 tag-prefix: '[vV]' mode: ContinuousDeployment branches: diff --git a/LICENSE b/LICENSE index e6791d9..fd9e29c 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2025 CØDE SHΔYK +Copyright (c) 2026 CØDE SHΔYK Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 27b6ecb..ee2a9b5 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,9 @@ -# ninja Parsley.Net v2.0.1 +# ninja Parsley.Net v2.1.0 [![NuGet version](https://badge.fury.io/nu/Parsley.Net.svg)](https://badge.fury.io/nu/Parsley.Net) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/CodeShayk/Parsley.Net/blob/master/LICENSE.md) [![GitHub Release](https://img.shields.io/github/v/release/CodeShayk/Parsley.Net?logo=github&sort=semver)](https://github.com/CodeShayk/Parsley.Net/releases/latest) [![master-build](https://github.com/CodeShayk/parsley.net/actions/workflows/Master-Build.yml/badge.svg)](https://github.com/CodeShayk/parsley.net/actions/workflows/Master-Build.yml) [![master-codeql](https://github.com/CodeShayk/parsley.net/actions/workflows/Master-CodeQL.yml/badge.svg)](https://github.com/CodeShayk/parsley.net/actions/workflows/Master-CodeQL.yml) +[![.Net 10.0](https://img.shields.io/badge/.Net-10.0-blue)](https://dotnet.microsoft.com/en-us/download/dotnet/10.0) [![.Net 9.0](https://img.shields.io/badge/.Net-9.0-blue)](https://dotnet.microsoft.com/en-us/download/dotnet/9.0) [![.Net Framework 4.6.4](https://img.shields.io/badge/.Net-4.6.2-blue)](https://dotnet.microsoft.com/en-us/download/dotnet-framework/net46) [![.Net Standard 2.0](https://img.shields.io/badge/.NetStandard-2.0-blue)](https://github.com/dotnet/standard/blob/v2.0.0/docs/versions/netstandard2.0.md) diff --git a/src/Parsley/Parsley.csproj b/src/Parsley/Parsley.csproj index 85a4a20..b3e6b12 100644 --- a/src/Parsley/Parsley.csproj +++ b/src/Parsley/Parsley.csproj @@ -7,10 +7,10 @@ CodeShayk CodeShayk Parsley is a .Net utility to parse Fixed width or Delimiter separated file (eg.CSV). - ninja-icon-16.png + parser-icon.png README.md True - Copyright (c) 2025 Code Shayk + Copyright (c) 2026 Code Shayk git tsv, csv, delimiter, delimited-files, delimited-data, fixed-width, comma-separated-values, comma-separated-fields, comma-separated-text, comma-separated-file, comma-separated, fixed-width-text, delimiter-string, delimiter-separated-values, fixed-width-parser, delimiter-separated-fields, delimiter-separated-text, delimiter-separated-file, fixed-width-file, fixed-width-format, delimiter-file, delimited-file True @@ -19,151 +19,20 @@ True https://github.com/CodeShayk/Parsley.Net/wiki https://github.com/CodeShayk/Parsley.Net - # Release Notes - Parsley.Net v2.0.0 - -## Release Type: Major Release -**Date**: 2025-10-13 -**Version**: 2.0.0 - -## Summary -This major release represents a comprehensive evolution of the Parsley.Net library, incorporating all improvements from previous versions. The release includes critical bug fixes, performance enhancements, new features, and improved error handling, while maintaining complete backward compatibility. This consolidation brings together all improvements in a single, cohesive release. - -## All Included Tasks - -### Task 1: Fix Syntax Error in Parser.cs -- **Priority**: Critical -- **Category**: Bug Fix -- **Change**: Removed unnecessary semicolon in Parse<T>(string[] lines) method -- **Impact**: Zero functional impact on the library -- **Backward Compatibility**: Fully compatible with existing code - -### Task 2: Implement Memory-Efficient Streaming Option -- **Priority**: High -- **Category**: Enhancement -- **Change**: NOT IMPLEMENTED - Skipped as requested in the original task -- **Impact**: Feature not included in this release -- **Backward Compatibility**: N/A - -### Task 3: Enhance Error Reporting with Line Numbers -- **Priority**: High -- **Category**: Enhancement -- **Change**: Added line number information and field names to parsing errors -- **Impact**: Improved debugging experience for users -- **Backward Compatibility**: Fully compatible - only changes error message content - -### Task 4: Refactor Parallel Processing Implementation -- **Priority**: Medium -- **Category**: Performance & Code Quality -- **Change**: Replaced lock-based parallel processing with more efficient approach -- **Impact**: Better performance and thread safety -- **Backward Compatibility**: Fully compatible - internal implementation change only - -### Task 5: Add Configuration Options -- **Priority**: Medium -- **Category**: Enhancement -- **Change**: Implemented a ParseOptions class for flexible parsing configuration -- **Impact**: More flexible parsing options with optional configuration -- **Backward Compatibility**: Fully compatible - all existing code continues to work - -### Task 6: Implement Result Pattern for Better Error Handling -- **Priority**: Low -- **Category**: Enhancement -- **Change**: Added Result<T> or TryParse-style methods for explicit error handling -- **Impact**: More explicit error handling for advanced scenarios -- **Backward Compatibility**: Fully compatible - adds new methods while preserving existing ones - -## Complete Changes - -### Bug Fixes -- Fixed syntax error that could cause compilation warnings -- No API changes -- No behavior changes for existing functionality -- All existing functionality preserved - -### Performance Enhancements -- Improved parallel processing performance (replaced lock-based approach) -- Memory-efficient streaming options for large file processing -- Better performance without sacrificing thread safety - -### New Features -- IAsyncEnumerable<T> support for streaming large files -- Enhanced error messages with line numbers and field names -- ParseOptions class with configurable parsing behavior -- Result<T>-based methods for explicit error handling -- Support for skip header lines, custom delimiters, and other parsing options -- TryParse-style methods for functional programming patterns - -### API Extensions -- New streaming methods added to IParser interface -- Enhanced error reporting mechanisms -- Configuration options through ParseOptions class -- Result-pattern based parsing methods - -## Breaking Changes -- None. This release maintains complete backward compatibility. - -## Testing -- All existing unit tests pass -- New tests added for streaming functionality -- New tests added for configuration functionality -- New tests added for Result pattern methods -- Performance benchmarks show improvements -- No regression issues detected -- Backward compatibility verified - -## Upgrade Instructions -- Drop-in replacement for all previous versions (v1.1.5 and earlier) -- No code changes required for existing functionality -- New features can be adopted incrementally -- Simply update the NuGet package reference - -## Files Changed -- src/Parsley/IParser.cs -- src/Parsley/Parser.cs -- src/Parsley/IFileLine.cs -- src/Parsley/Resources.resx -- src/Parsley/Resources.Designer.cs -- src/Parsley/IocExtensions.cs -- src/Parsley/Extensions.cs - -## Key Improvements Summary - -### 1. Code Quality & Bug Fixes -- Eliminated syntax error in Parser.cs -- Improved code structure and maintainability - -### 2. Memory Efficiency -- Added streaming support for processing very large files -- Reduced memory footprint when processing large datasets - -### 3. Error Reporting -- Enhanced error messages with line numbers -- Added field/property context to errors -- Better debugging experience for users - -### 4. Performance -- More efficient parallel processing implementation -- Reduced locking bottlenecks -- Better resource utilization - -### 5. Flexibility -- Configuration options through ParseOptions class -- Multiple ways to use the library (traditional and functional patterns) -- Better support for various parsing scenarios - -### 6. Developer Experience -- More intuitive API options -- Better error diagnostics -- Multiple usage patterns to choose from - -This comprehensive release combines all the improvements from the incremental development path into a single, powerful version that provides maximum value to users while maintaining complete compatibility with existing codebases. - 2.0.0 + + # Release Notes - Parsley.Net v2.1.0 + ## Release Type: Minor Release: Targets .Net 10 + **Date**: 2026-03-13 + **Version**: 2.1.0 + + + 2.1.0 True Parsley.Net - + True \