{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":976835,"defaultBranch":"main","name":"SmartFormat","ownerLogin":"axuno","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2010-10-10T18:43:26.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/18664166?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1719845394.0","currentOid":""},"activityList":{"items":[{"before":"65714e2a743c264c5a27e0fe26089918c9a536de","after":"6874471279ad549a682cdc67fbc4eeafce12b3a3","ref":"refs/heads/main","pushedAt":"2024-07-05T21:35:40.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"axunonb","name":null,"path":"/axunonb","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10255664?s=80&v=4"},"commit":{"message":"chore: Remove Github workflow for wiki updates (#433)\n\nReasoning: Permanent errors","shortMessageHtmlLink":"chore: Remove Github workflow for wiki updates (#433)"}},{"before":"a2e2aa3525a5d11119c509cbc7f649034f38d9f9","after":"65714e2a743c264c5a27e0fe26089918c9a536de","ref":"refs/heads/main","pushedAt":"2024-07-05T20:52:54.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"axunonb","name":null,"path":"/axunonb","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10255664?s=80&v=4"},"commit":{"message":"chore: Fix missing double quote at end of the line for commit message (#432)","shortMessageHtmlLink":"chore: Fix missing double quote at end of the line for commit message ("}},{"before":"3cc88a074350f734bab007fd70c25165cb575ec5","after":"a2e2aa3525a5d11119c509cbc7f649034f38d9f9","ref":"refs/heads/main","pushedAt":"2024-07-05T20:39:41.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"axunonb","name":null,"path":"/axunonb","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10255664?s=80&v=4"},"commit":{"message":"chore: Try to fix errors with wiki commit message (#431)","shortMessageHtmlLink":"chore: Try to fix errors with wiki commit message (#431)"}},{"before":"8ed7cf340d7ba92887c9440377ba9ddf93ec0857","after":"92c746769ea0dc689e500a42d3724942aec48a47","ref":"refs/heads/version/logicalc-formatter","pushedAt":"2024-07-04T12:30:35.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"axunonb","name":null,"path":"/axunonb","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10255664?s=80&v=4"},"commit":{"message":"Make FormatNCalcCache thread-local (#428)","shortMessageHtmlLink":"Make FormatNCalcCache thread-local (#428)"}},{"before":"16e432c98331bc2267c47ef90ffb370540623d3b","after":"3cc88a074350f734bab007fd70c25165cb575ec5","ref":"refs/heads/main","pushedAt":"2024-07-04T12:29:29.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"axunonb","name":null,"path":"/axunonb","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10255664?s=80&v=4"},"commit":{"message":"chore: Remove disallowed characters in commit message (#430)","shortMessageHtmlLink":"chore: Remove disallowed characters in commit message (#430)"}},{"before":"b20d24069dd33efbb0a9ba178e13f3e29094cb94","after":"8ed7cf340d7ba92887c9440377ba9ddf93ec0857","ref":"refs/heads/version/logicalc-formatter","pushedAt":"2024-07-03T06:59:58.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"axunonb","name":null,"path":"/axunonb","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10255664?s=80&v=4"},"commit":{"message":"Make FormatNCalcCache thread-local (#428)","shortMessageHtmlLink":"Make FormatNCalcCache thread-local (#428)"}},{"before":"2bf827fb6cb8e8490046d443bad6821110bece02","after":"16e432c98331bc2267c47ef90ffb370540623d3b","ref":"refs/heads/main","pushedAt":"2024-07-03T06:55:51.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"axunonb","name":null,"path":"/axunonb","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10255664?s=80&v=4"},"commit":{"message":"Url-encode special characters in the commit message (#429)\n\nReasoning: runner error for such special characters","shortMessageHtmlLink":"Url-encode special characters in the commit message (#429)"}},{"before":"069ae42eb0dab03dabbcb865049a6882c94c3a8f","after":"b20d24069dd33efbb0a9ba178e13f3e29094cb94","ref":"refs/heads/version/logicalc-formatter","pushedAt":"2024-07-02T13:55:03.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"axunonb","name":null,"path":"/axunonb","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10255664?s=80&v=4"},"commit":{"message":"Make FormatNCalcCache thread-local (#428)","shortMessageHtmlLink":"Make FormatNCalcCache thread-local (#428)"}},{"before":"421c7155b47d8e819a0a75a392f2b19f2c56e7bd","after":"2bf827fb6cb8e8490046d443bad6821110bece02","ref":"refs/heads/main","pushedAt":"2024-07-02T13:53:17.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"axunonb","name":null,"path":"/axunonb","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10255664?s=80&v=4"},"commit":{"message":"feature: ReflectionSource and DictionarySource (#426)\n\n* Initial commit\r\n\r\n* Make ReflectionSource.TypeCache static\r\n* Control size of ReflectionSource.TypeCache, remove oldest item first\r\n* dynamics in DictionarySource also use case-sensitivity setting\r\n* Cache for IReadOnlyDictionary has instance scope\r\n\r\n* Remove cache insertion tracker for NET6_0_OR_GREATER\r\n\r\nOnly before NETCore3.1, the dictionary is not ordered by insertion order.\r\n\r\n* Add explicit EqualityComparer for creating the TypeCache dictionary\r\n\r\n* Add comment about handling case-sensitivity\r\n* Add test for: When there are multiple members with the same name but different case, the first member is used\r\n\r\n* Add unit test for dynamics (ExpandoObject) case-insensitive\r\n\r\n* refactor: Less cognitive complexity\r\n\r\n* for DictionarySource\r\n* for ReflectionSource\r\n\r\n* chore: Fix indent","shortMessageHtmlLink":"feature: ReflectionSource and DictionarySource (#426)"}},{"before":"880a3b4a3748c3efed36f6f05254c05d383adb7c","after":null,"ref":"refs/heads/pr/cache-thread-local","pushedAt":"2024-07-01T14:49:54.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"axunonb","name":null,"path":"/axunonb","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10255664?s=80&v=4"}},{"before":"20d07e137771477e5db8118b67da9345f2b834bb","after":"069ae42eb0dab03dabbcb865049a6882c94c3a8f","ref":"refs/heads/version/logicalc-formatter","pushedAt":"2024-07-01T14:49:50.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"axunonb","name":null,"path":"/axunonb","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10255664?s=80&v=4"},"commit":{"message":"Make FormatNCalcCache thread-local (#428)","shortMessageHtmlLink":"Make FormatNCalcCache thread-local (#428)"}},{"before":"8b37cf5f9e3656294bed0037a365214a70728f61","after":"880a3b4a3748c3efed36f6f05254c05d383adb7c","ref":"refs/heads/pr/cache-thread-local","pushedAt":"2024-07-01T14:48:52.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"axunonb","name":null,"path":"/axunonb","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10255664?s=80&v=4"},"commit":{"message":"Make FormatNCalcCache thread-local","shortMessageHtmlLink":"Make FormatNCalcCache thread-local"}},{"before":null,"after":"8b37cf5f9e3656294bed0037a365214a70728f61","ref":"refs/heads/pr/cache-thread-local","pushedAt":"2024-07-01T14:46:16.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"axunonb","name":null,"path":"/axunonb","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10255664?s=80&v=4"},"commit":{"message":"Make FormatNCalcCache thread-local","shortMessageHtmlLink":"Make FormatNCalcCache thread-local"}},{"before":"2608b67300b6a2c0130e35ba9663680deba60c5c","after":null,"ref":"refs/heads/pr/ncalc-v5","pushedAt":"2024-07-01T14:28:51.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"axunonb","name":null,"path":"/axunonb","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10255664?s=80&v=4"}},{"before":"2fc39ef70829531d4c9f67ace2ee258e2d90c267","after":"20d07e137771477e5db8118b67da9345f2b834bb","ref":"refs/heads/version/logicalc-formatter","pushedAt":"2024-07-01T14:28:48.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"axunonb","name":null,"path":"/axunonb","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10255664?s=80&v=4"},"commit":{"message":"Upgrade to NCalc v5.0.0 (#427)","shortMessageHtmlLink":"Upgrade to NCalc v5.0.0 (#427)"}},{"before":null,"after":"2608b67300b6a2c0130e35ba9663680deba60c5c","ref":"refs/heads/pr/ncalc-v5","pushedAt":"2024-07-01T14:26:44.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"axunonb","name":null,"path":"/axunonb","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10255664?s=80&v=4"},"commit":{"message":"Upgrade to NCalc v5.0.0","shortMessageHtmlLink":"Upgrade to NCalc v5.0.0"}},{"before":"1425a46ac21b92e2dcdd221220bfd8ae3129400b","after":"2fc39ef70829531d4c9f67ace2ee258e2d90c267","ref":"refs/heads/version/logicalc-formatter","pushedAt":"2024-06-27T17:00:14.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"axunonb","name":null,"path":"/axunonb","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10255664?s=80&v=4"},"commit":{"message":"Formatter using ncalc","shortMessageHtmlLink":"Formatter using ncalc"}},{"before":"2fc39ef70829531d4c9f67ace2ee258e2d90c267","after":"1425a46ac21b92e2dcdd221220bfd8ae3129400b","ref":"refs/heads/version/logicalc-formatter","pushedAt":"2024-06-27T16:50:18.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"axunonb","name":null,"path":"/axunonb","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10255664?s=80&v=4"},"commit":{"message":"Use ConcurrentDictionary in ThreadSafeMode, else Dictionary","shortMessageHtmlLink":"Use ConcurrentDictionary in ThreadSafeMode, else Dictionary"}},{"before":"421c7155b47d8e819a0a75a392f2b19f2c56e7bd","after":"2fc39ef70829531d4c9f67ace2ee258e2d90c267","ref":"refs/heads/version/logicalc-formatter","pushedAt":"2024-06-27T16:31:33.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"axunonb","name":null,"path":"/axunonb","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10255664?s=80&v=4"},"commit":{"message":"Formatter using ncalc","shortMessageHtmlLink":"Formatter using ncalc"}},{"before":"0e1e91242611e1bc441f0372a1524acba38bbcfc","after":null,"ref":"refs/heads/pr-ncalc-formatter","pushedAt":"2024-06-27T16:24:03.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"axunonb","name":null,"path":"/axunonb","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10255664?s=80&v=4"}},{"before":null,"after":"421c7155b47d8e819a0a75a392f2b19f2c56e7bd","ref":"refs/heads/version/logicalc-formatter","pushedAt":"2024-06-27T16:15:02.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"axunonb","name":null,"path":"/axunonb","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10255664?s=80&v=4"},"commit":{"message":"refactor: Split off Registry and Evaluator from SmartFormatter (#424)\n\nSmartFormatter\r\n\r\n* SOC: Members for handling ISource and IFormatter extensions moved to internal class Registry\r\n* SOC: Members for evaluating formats moved to internal class Evaluator\r\n* Existing member of SmartFormatter remain unchanged and are also not marked as obsolete\r\n* No changes to the code logic inside members that were moved\r\n* Unit tests unchanged, except for improving coverage and tests for new classes\r\n\r\nZCharArray\r\n\r\n* A lightweight, thread-safe container that rents a buffer from an ArrayPool and returns it when disposed.\r\n* It simplifies passing around the buffer without intermediate memory allocations. It contains most frequently used methods for writing data into the underlying buffer.\r\n\r\nFormattingInfo\r\n\r\nAdded methods:\r\n\r\n* public ZCharArray FormattingInfo.FormatAsSpan(IFormatProvider, Format, object?): Works like Smart.Format(...) for the specified Format\r\n* public ZCharArray FormattingInfo.FormatAsSpan(IFormatProvider, Placeholder, object?): Gets the value for the Placeholder and applies its Format\r\n* public bool TryGetValue(Placeholder, out object?): Tries to get the value for a Placeholder\r\n\r\nEvaluator\r\n\r\n* internal class\r\n* Supplies the methods for evaluating Placeholder and Format objects\r\n* Contains the methods that FormattingInfo uses to evaluate Placeholder and Format objects (see above).\r\n* Has other methods formerly included in SmartFormatter that are now moved to Evaluator\r\n* Has a partial class for handling events in all steps of the evaluation process. As a sample, the SmartFormatter.Tests contain a utility EvaluatorEventAggregator. It subscribes for the events from Evaluator and can be used with 3 lines of code from any test method. \r\n\r\nRegistry\r\n\r\n* internal class\r\n* Contains all methods for handling ISource and IFormatter extensions that have been moved from SmartFormatter.\r\n* No changes to the code logic inside members that were moved","shortMessageHtmlLink":"refactor: Split off Registry and Evaluator from SmartFormatter (#424)"}},{"before":"a7151cc03b8f912b071802549d1cdba56b15fb05","after":"421c7155b47d8e819a0a75a392f2b19f2c56e7bd","ref":"refs/heads/main","pushedAt":"2024-06-27T15:27:08.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"axunonb","name":null,"path":"/axunonb","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10255664?s=80&v=4"},"commit":{"message":"refactor: Split off Registry and Evaluator from SmartFormatter (#424)\n\nSmartFormatter\r\n\r\n* SOC: Members for handling ISource and IFormatter extensions moved to internal class Registry\r\n* SOC: Members for evaluating formats moved to internal class Evaluator\r\n* Existing member of SmartFormatter remain unchanged and are also not marked as obsolete\r\n* No changes to the code logic inside members that were moved\r\n* Unit tests unchanged, except for improving coverage and tests for new classes\r\n\r\nZCharArray\r\n\r\n* A lightweight, thread-safe container that rents a buffer from an ArrayPool and returns it when disposed.\r\n* It simplifies passing around the buffer without intermediate memory allocations. It contains most frequently used methods for writing data into the underlying buffer.\r\n\r\nFormattingInfo\r\n\r\nAdded methods:\r\n\r\n* public ZCharArray FormattingInfo.FormatAsSpan(IFormatProvider, Format, object?): Works like Smart.Format(...) for the specified Format\r\n* public ZCharArray FormattingInfo.FormatAsSpan(IFormatProvider, Placeholder, object?): Gets the value for the Placeholder and applies its Format\r\n* public bool TryGetValue(Placeholder, out object?): Tries to get the value for a Placeholder\r\n\r\nEvaluator\r\n\r\n* internal class\r\n* Supplies the methods for evaluating Placeholder and Format objects\r\n* Contains the methods that FormattingInfo uses to evaluate Placeholder and Format objects (see above).\r\n* Has other methods formerly included in SmartFormatter that are now moved to Evaluator\r\n* Has a partial class for handling events in all steps of the evaluation process. As a sample, the SmartFormatter.Tests contain a utility EvaluatorEventAggregator. It subscribes for the events from Evaluator and can be used with 3 lines of code from any test method. \r\n\r\nRegistry\r\n\r\n* internal class\r\n* Contains all methods for handling ISource and IFormatter extensions that have been moved from SmartFormatter.\r\n* No changes to the code logic inside members that were moved","shortMessageHtmlLink":"refactor: Split off Registry and Evaluator from SmartFormatter (#424)"}},{"before":"9fb432c30ad2fd869fa832a03e6bae7b93a90085","after":"a7151cc03b8f912b071802549d1cdba56b15fb05","ref":"refs/heads/main","pushedAt":"2024-06-21T06:29:24.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"axunonb","name":null,"path":"/axunonb","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10255664?s=80&v=4"},"commit":{"message":"Update README (#423)","shortMessageHtmlLink":"Update README (#423)"}},{"before":"30b3a285ce4d6c0583f8d6baf7d7b7f6f0e5c2d1","after":"9fb432c30ad2fd869fa832a03e6bae7b93a90085","ref":"refs/heads/main","pushedAt":"2024-06-10T07:21:30.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"axunonb","name":null,"path":"/axunonb","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10255664?s=80&v=4"},"commit":{"message":"chore: Improve CI (#420)\n\n* Add files to ignore\r\n* Add condition when to run","shortMessageHtmlLink":"chore: Improve CI (#420)"}},{"before":"e28d6a8e1de1345b445f8871c216aab1e83ed9ba","after":"30b3a285ce4d6c0583f8d6baf7d7b7f6f0e5c2d1","ref":"refs/heads/main","pushedAt":"2024-06-09T07:59:17.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"axunonb","name":null,"path":"/axunonb","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10255664?s=80&v=4"},"commit":{"message":"chore: Fix CI workflow (#418)","shortMessageHtmlLink":"chore: Fix CI workflow (#418)"}},{"before":"cbb27ee5a0dbe95b520ca7e47f9659800ad234b2","after":"e28d6a8e1de1345b445f8871c216aab1e83ed9ba","ref":"refs/heads/main","pushedAt":"2024-06-09T07:41:09.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"axunonb","name":null,"path":"/axunonb","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10255664?s=80&v=4"},"commit":{"message":"feat: Format.HasNested checks for existing Placeholder in Items (#416)\n\n* feat: Format.HasNested checks for existing Placeholder\r\n\r\nCloses #415\r\n* `Format.HasNested` checks Items for existing `Placeholder`\r\n* Update Format Class Initialization (mark overload with arg `bool hasNested` as obsolete","shortMessageHtmlLink":"feat: Format.HasNested checks for existing Placeholder in Items (#416)"}},{"before":"0ec894763f87d3202c38fad3d567cad1fa05bd74","after":"cbb27ee5a0dbe95b520ca7e47f9659800ad234b2","ref":"refs/heads/main","pushedAt":"2024-06-08T15:55:53.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"axunonb","name":null,"path":"/axunonb","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10255664?s=80&v=4"},"commit":{"message":"chore: Update action for Wiki update tracking (#414)\n\n* Update to JasonEtco/create-an-issue@v2.9.2\r\n* Create issue with label `Docs`\r\n* Show number of commits in the last 24 hours\r\n* Show details about the latest commit","shortMessageHtmlLink":"chore: Update action for Wiki update tracking (#414)"}},{"before":"bf48de9f7f419c7d2b52f646c026bd847a27fa88","after":null,"ref":"refs/heads/version/3.4.0","pushedAt":"2024-06-07T16:10:50.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"axunonb","name":null,"path":"/axunonb","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10255664?s=80&v=4"}},{"before":"724ff325247a6a689001c31bb42ad87df10893d8","after":"0ec894763f87d3202c38fad3d567cad1fa05bd74","ref":"refs/heads/main","pushedAt":"2024-06-07T15:34:43.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"axunonb","name":null,"path":"/axunonb","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10255664?s=80&v=4"},"commit":{"message":"Create issue when Wiki repo gets updated (#411)","shortMessageHtmlLink":"Create issue when Wiki repo gets updated (#411)"}},{"before":"21ab0b9cd5a3f07931c54dd38a85db58898dc646","after":null,"ref":"refs/heads/pr/wiki-update","pushedAt":"2024-06-07T15:17:24.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"axunonb","name":null,"path":"/axunonb","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/10255664?s=80&v=4"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEeCBraQA","startCursor":null,"endCursor":null}},"title":"Activity · axuno/SmartFormat"}