com.wallstop-studios.unity-helpers 2.0.0-rc81.7 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1500) hide show
  1. package/.config/dotnet-tools.json +10 -10
  2. package/.csharpierignore +1 -0
  3. package/.csharpierrc.json +3 -0
  4. package/.editorconfig +184 -184
  5. package/.gitattributes +87 -63
  6. package/.githooks/pre-commit +75 -0
  7. package/.githooks/pre-push +50 -0
  8. package/.github/dependabot.yml +32 -10
  9. package/.github/scripts/check-markdown-links.ps1 +77 -0
  10. package/.github/scripts/check_markdown_links.py +89 -0
  11. package/.github/scripts/check_markdown_url_encoding.py +74 -0
  12. package/.github/scripts/validate_markdown_links.py +194 -0
  13. package/.github/workflows/csharpier-autofix.yml +152 -0
  14. package/.github/workflows/format-on-demand.yml +305 -0
  15. package/.github/workflows/lint-doc-links.yml +30 -0
  16. package/.github/workflows/markdown-json.yml +45 -0
  17. package/.github/workflows/npm-publish.yml +75 -75
  18. package/.github/workflows/prettier-autofix.yml +195 -0
  19. package/.github/workflows/update-dotnet-tools.yml +80 -0
  20. package/.github/workflows/yaml-format-lint.yml +41 -0
  21. package/.lychee.toml +26 -0
  22. package/.markdownlint.json +21 -0
  23. package/.markdownlint.jsonc +21 -0
  24. package/.markdownlintignore +8 -0
  25. package/.pre-commit-config.yaml +47 -22
  26. package/.prettierignore +22 -0
  27. package/.prettierrc.json +20 -0
  28. package/.yamllint.yaml +31 -0
  29. package/AGENTS.md +56 -0
  30. package/{Third Party Notices.md.meta → AGENTS.md.meta} +7 -7
  31. package/CHANGELOG.md +11 -0
  32. package/CHANGELOG.md.meta +7 -7
  33. package/CONTRIBUTING.md +49 -0
  34. package/CONTRIBUTING.md.meta +7 -0
  35. package/DATA_STRUCTURES.md +324 -0
  36. package/DATA_STRUCTURES.md.meta +7 -0
  37. package/Docs/Images/attribute_resolution.svg +40 -0
  38. package/Docs/Images/attribute_resolution.svg.meta +7 -0
  39. package/Docs/Images/bitset.svg +47 -0
  40. package/Docs/Images/bitset.svg.meta +7 -0
  41. package/Docs/Images/concave_hull.svg +30 -0
  42. package/Docs/Images/concave_hull.svg.meta +7 -0
  43. package/Docs/Images/convex_hull.svg +29 -0
  44. package/Docs/Images/convex_hull.svg.meta +7 -0
  45. package/Docs/Images/cyclic_buffer.svg +37 -0
  46. package/Docs/Images/cyclic_buffer.svg.meta +7 -0
  47. package/Docs/Images/data_distribution_decision.svg +88 -0
  48. package/Docs/Images/data_distribution_decision.svg.meta +7 -0
  49. package/Docs/Images/deque.svg +64 -0
  50. package/Docs/Images/deque.svg.meta +7 -0
  51. package/Docs/Images/deque_queue.svg +107 -0
  52. package/Docs/Images/deque_queue.svg.meta +7 -0
  53. package/Docs/Images/disjoint_set.svg +47 -0
  54. package/Docs/Images/disjoint_set.svg.meta +7 -0
  55. package/Docs/Images/effects_pipeline.svg +59 -0
  56. package/Docs/Images/effects_pipeline.svg.meta +7 -0
  57. package/Docs/Images/geometry_edge_cases.svg +61 -0
  58. package/Docs/Images/geometry_edge_cases.svg.meta +7 -0
  59. package/Docs/Images/heap.svg +56 -0
  60. package/Docs/Images/heap.svg.meta +7 -0
  61. package/Docs/Images/kdtree_2d.svg +38 -0
  62. package/Docs/Images/kdtree_2d.svg.meta +7 -0
  63. package/Docs/Images/kdtree_3d.svg +83 -0
  64. package/Docs/Images/kdtree_3d.svg.meta +7 -0
  65. package/Docs/Images/octree_3d.svg +79 -0
  66. package/Docs/Images/octree_3d.svg.meta +7 -0
  67. package/Docs/Images/polyline_simplify.svg +18 -0
  68. package/Docs/Images/polyline_simplify.svg.meta +7 -0
  69. package/Docs/Images/quadtree_2d.svg +37 -0
  70. package/Docs/Images/quadtree_2d.svg.meta +7 -0
  71. package/Docs/Images/query_boundaries.svg +38 -0
  72. package/Docs/Images/query_boundaries.svg.meta +7 -0
  73. package/Docs/Images/random_generators.svg +105 -0
  74. package/Docs/Images/random_generators.svg.meta +7 -0
  75. package/Docs/Images/reflection_scan.svg +33 -0
  76. package/Docs/Images/reflection_scan.svg.meta +7 -0
  77. package/Docs/Images/relational_wiring.svg +75 -0
  78. package/Docs/Images/relational_wiring.svg.meta +7 -0
  79. package/Docs/Images/rtree_2d.svg +27 -0
  80. package/Docs/Images/rtree_2d.svg.meta +7 -0
  81. package/Docs/Images/rtree_3d.svg +79 -0
  82. package/Docs/Images/rtree_3d.svg.meta +7 -0
  83. package/Docs/Images/serialization_flow.svg +50 -0
  84. package/Docs/Images/serialization_flow.svg.meta +7 -0
  85. package/Docs/Images/singletons_lifecycle.svg +54 -0
  86. package/Docs/Images/singletons_lifecycle.svg.meta +7 -0
  87. package/Docs/Images/sparse_set.svg +54 -0
  88. package/Docs/Images/sparse_set.svg.meta +7 -0
  89. package/Docs/Images/trie.svg +55 -0
  90. package/Docs/Images/trie.svg.meta +7 -0
  91. package/Docs/Images.meta +8 -0
  92. package/Docs.meta +8 -0
  93. package/EDITOR_TOOLS_GUIDE.md +1980 -0
  94. package/EDITOR_TOOLS_GUIDE.md.meta +7 -0
  95. package/EFFECTS_SYSTEM.md +242 -0
  96. package/EFFECTS_SYSTEM.md.meta +7 -0
  97. package/EFFECTS_SYSTEM_TUTORIAL.md +467 -0
  98. package/EFFECTS_SYSTEM_TUTORIAL.md.meta +7 -0
  99. package/Editor/AnimationEventEditor.cs +1570 -874
  100. package/Editor/AnimationEventEditor.cs.meta +11 -11
  101. package/Editor/AssemblyInfo.cs +4 -0
  102. package/Editor/AssemblyInfo.cs.meta +3 -0
  103. package/Editor/AssetProcessors/SpriteLabelProcessor.cs +138 -111
  104. package/Editor/AssetProcessors/SpriteLabelProcessor.cs.meta +2 -2
  105. package/Editor/AssetProcessors.meta +2 -2
  106. package/Editor/Core/Helper/AnimationEventHelpers.cs +230 -0
  107. package/{Runtime/Core/DataStructure/ISpatialTree.cs.meta → Editor/Core/Helper/AnimationEventHelpers.cs.meta} +11 -11
  108. package/Editor/Core/Helper.meta +8 -0
  109. package/Editor/Core.meta +8 -0
  110. package/Editor/CustomDrawers/IntDropdownDrawer.cs +46 -46
  111. package/Editor/CustomDrawers/IntDropdownDrawer.cs.meta +2 -2
  112. package/Editor/CustomDrawers/StringInListeDrawer.cs +135 -135
  113. package/Editor/CustomDrawers/StringInListeDrawer.cs.meta +2 -2
  114. package/Editor/CustomDrawers/WShowIfPropertyDrawer.cs +105 -105
  115. package/Editor/CustomDrawers/WShowIfPropertyDrawer.cs.meta +2 -2
  116. package/Editor/CustomDrawers.meta +2 -2
  117. package/Editor/CustomEditors/MatchColliderToSpriteEditor.cs +32 -32
  118. package/Editor/CustomEditors/MatchColliderToSpriteEditor.cs.meta +2 -2
  119. package/Editor/CustomEditors/PersistentDirectoryGUI.cs +808 -799
  120. package/Editor/CustomEditors/PersistentDirectoryGUI.cs.meta +2 -2
  121. package/Editor/CustomEditors/PolygonCollider2DOptimizerEditor.cs +38 -40
  122. package/Editor/CustomEditors/PolygonCollider2DOptimizerEditor.cs.meta +2 -2
  123. package/Editor/CustomEditors/SourceFolderEntryDrawer.cs +685 -413
  124. package/Editor/CustomEditors/SourceFolderEntryDrawer.cs.meta +2 -2
  125. package/Editor/CustomEditors/TexturePlatformOverrideEntryDrawer.cs +155 -0
  126. package/{Runtime/Core/DataStructure/KDTree.cs.meta → Editor/CustomEditors/TexturePlatformOverrideEntryDrawer.cs.meta} +11 -11
  127. package/Editor/CustomEditors.meta +2 -2
  128. package/Editor/Extensions/SerializedPropertyExtensions.cs +217 -190
  129. package/Editor/Extensions/SerializedPropertyExtensions.cs.meta +2 -2
  130. package/Editor/Extensions/UnityExtensions.cs +50 -26
  131. package/Editor/Extensions/UnityExtensions.cs.meta +2 -2
  132. package/Editor/Extensions.meta +2 -2
  133. package/Editor/FitTextureSizeWindow.cs +809 -332
  134. package/Editor/FitTextureSizeWindow.cs.meta +2 -2
  135. package/Editor/Persistence/MultiFileSelectorPersistenceManager.cs +62 -0
  136. package/{Runtime/Core/DataStructure/QuadTree.cs.meta → Editor/Persistence/MultiFileSelectorPersistenceManager.cs.meta} +11 -11
  137. package/Editor/Persistence/MultiFileSelectorPersistenceWindow.cs +65 -0
  138. package/Editor/Persistence/MultiFileSelectorPersistenceWindow.cs.meta +11 -0
  139. package/Editor/Persistence.meta +8 -0
  140. package/Editor/PersistentDirectorySettings.cs +581 -248
  141. package/Editor/PersistentDirectorySettings.cs.meta +2 -2
  142. package/Editor/PrefabChecker.cs +1396 -741
  143. package/Editor/PrefabChecker.cs.meta +11 -11
  144. package/Editor/Sprites/AnimationCopier.cs +1594 -789
  145. package/Editor/Sprites/AnimationCopier.cs.meta +2 -2
  146. package/Editor/Sprites/AnimationCreator.cs +1573 -881
  147. package/Editor/Sprites/AnimationCreator.cs.meta +11 -11
  148. package/Editor/Sprites/AnimationViewerWindow.cs +1670 -1522
  149. package/Editor/Sprites/AnimationViewerWindow.cs.meta +2 -2
  150. package/Editor/Sprites/ScriptableSpriteAtlas.cs +251 -178
  151. package/Editor/Sprites/ScriptableSpriteAtlas.cs.meta +2 -2
  152. package/Editor/Sprites/ScriptableSpriteAtlasEditor.cs +1470 -1026
  153. package/Editor/Sprites/ScriptableSpriteAtlasEditor.cs.meta +2 -2
  154. package/Editor/Sprites/SpriteCropper.cs +1013 -523
  155. package/Editor/Sprites/SpriteCropper.cs.meta +2 -2
  156. package/Editor/Sprites/SpritePivotAdjustor.cs +605 -265
  157. package/Editor/Sprites/SpritePivotAdjustor.cs.meta +2 -2
  158. package/Editor/Sprites/SpriteSettingsApplier.cs +942 -918
  159. package/Editor/Sprites/SpriteSettingsApplier.cs.meta +2 -2
  160. package/Editor/Sprites/SpriteSettingsApplierAPI.cs +441 -0
  161. package/Editor/Sprites/SpriteSettingsApplierAPI.cs.meta +11 -0
  162. package/Editor/Sprites/SpriteSettingsProfileCollection.cs +12 -0
  163. package/Editor/Sprites/SpriteSettingsProfileCollection.cs.meta +11 -0
  164. package/Editor/Sprites/SpriteSheetAnimationCreator.cs +1586 -1537
  165. package/Editor/Sprites/SpriteSheetAnimationCreator.cs.meta +2 -2
  166. package/Editor/Sprites/TexturePlatformNameHelper.cs +89 -0
  167. package/Editor/Sprites/TexturePlatformNameHelper.cs.meta +11 -0
  168. package/Editor/Sprites/TextureResizerWizard.cs +456 -175
  169. package/Editor/Sprites/TextureResizerWizard.cs.meta +2 -2
  170. package/Editor/Sprites/TextureSettingsApplierAPI.cs +359 -0
  171. package/Editor/Sprites/TextureSettingsApplierAPI.cs.meta +11 -0
  172. package/Editor/Sprites/TextureSettingsApplierWindow.cs +668 -0
  173. package/Editor/Sprites/TextureSettingsApplierWindow.cs.meta +11 -0
  174. package/Editor/Sprites.meta +2 -2
  175. package/Editor/Styles/AnimationViewer.uss +115 -115
  176. package/Editor/Styles/AnimationViewer.uss.meta +2 -2
  177. package/Editor/Styles/AnimationViewer.uxml +56 -56
  178. package/Editor/Styles/AnimationViewer.uxml.meta +2 -2
  179. package/Editor/Styles/SpriteSheetAnimationCreator.uss +10 -0
  180. package/Editor/Styles/SpriteSheetAnimationCreator.uss.meta +11 -0
  181. package/Editor/Styles.meta +2 -2
  182. package/Editor/Tags/AttributeMetadataCacheEditor.cs +46 -0
  183. package/Editor/Tags/AttributeMetadataCacheEditor.cs.meta +11 -0
  184. package/Editor/Tags/AttributeMetadataCacheGenerator.cs +258 -0
  185. package/Editor/Tags/AttributeMetadataCacheGenerator.cs.meta +11 -0
  186. package/Editor/Tags.meta +8 -0
  187. package/Editor/Tools/ImageBlurTool.cs +522 -409
  188. package/Editor/Tools/ImageBlurTool.cs.meta +2 -2
  189. package/Editor/Tools.meta +2 -2
  190. package/Editor/Utils/DxReadOnlyPropertyDrawer.cs +26 -26
  191. package/Editor/Utils/DxReadOnlyPropertyDrawer.cs.meta +11 -11
  192. package/Editor/Utils/EditorUi.cs +228 -0
  193. package/Editor/Utils/EditorUi.cs.meta +11 -0
  194. package/Editor/Utils/EditorUtilities.cs +22 -22
  195. package/Editor/Utils/EditorUtilities.cs.meta +11 -11
  196. package/Editor/Utils/ScriptableObjectSingletonCreator.cs +633 -52
  197. package/Editor/Utils/ScriptableObjectSingletonCreator.cs.meta +2 -2
  198. package/Editor/Utils.meta +8 -8
  199. package/Editor/Visuals/EnhancedImageEditor.cs +160 -160
  200. package/Editor/Visuals/EnhancedImageEditor.cs.meta +11 -11
  201. package/Editor/Visuals.meta +2 -2
  202. package/Editor/WallstopStudios.UnityHelpers.Editor.asmdef +14 -18
  203. package/Editor/WallstopStudios.UnityHelpers.Editor.asmdef.meta +7 -7
  204. package/Editor.meta +8 -8
  205. package/GETTING_STARTED.md +409 -0
  206. package/GETTING_STARTED.md.meta +7 -0
  207. package/GLOSSARY.md +313 -0
  208. package/GLOSSARY.md.meta +7 -0
  209. package/HULLS.md +45 -0
  210. package/HULLS.md.meta +7 -0
  211. package/INDEX.md +429 -0
  212. package/INDEX.md.meta +7 -0
  213. package/LICENSE +21 -21
  214. package/LICENSE.md +7 -7
  215. package/LICENSE.md.meta +7 -7
  216. package/LICENSE.meta +7 -7
  217. package/MATH_AND_EXTENSIONS.md +316 -0
  218. package/MATH_AND_EXTENSIONS.md.meta +7 -0
  219. package/RANDOM_PERFORMANCE.md +140 -0
  220. package/RANDOM_PERFORMANCE.md.meta +7 -0
  221. package/README.md +1183 -188
  222. package/README.md.meta +7 -7
  223. package/REFLECTION_HELPERS.md +272 -0
  224. package/REFLECTION_HELPERS.md.meta +7 -0
  225. package/RELATIONAL_COMPONENTS.md +552 -0
  226. package/RELATIONAL_COMPONENTS.md.meta +7 -0
  227. package/Runtime/AssemblyInfo.cs +9 -0
  228. package/Runtime/AssemblyInfo.cs.meta +11 -0
  229. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.dll +0 -0
  230. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.dll.meta +33 -33
  231. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.xml +499 -278
  232. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.xml.meta +7 -7
  233. package/Runtime/Binaries/System.IO.Pipelines.dll +0 -0
  234. package/Runtime/Binaries/System.IO.Pipelines.dll.meta +33 -0
  235. package/Runtime/Binaries/System.IO.Pipelines.xml +702 -0
  236. package/Runtime/Binaries/System.IO.Pipelines.xml.meta +7 -0
  237. package/Runtime/Binaries/System.Text.Encodings.Web.dll +0 -0
  238. package/Runtime/Binaries/System.Text.Encodings.Web.dll.meta +33 -33
  239. package/Runtime/Binaries/System.Text.Encodings.Web.xml +1084 -1079
  240. package/Runtime/Binaries/System.Text.Encodings.Web.xml.meta +7 -7
  241. package/Runtime/Binaries/System.Text.Json.dll +0 -0
  242. package/Runtime/Binaries/System.Text.Json.dll.meta +33 -33
  243. package/Runtime/Binaries/System.Text.Json.xml +10217 -8116
  244. package/Runtime/Binaries/System.Text.Json.xml.meta +7 -7
  245. package/Runtime/Binaries.meta +8 -8
  246. package/Runtime/Core/Attributes/AnimationEventAttribute.cs +10 -138
  247. package/Runtime/Core/Attributes/AnimationEventAttribute.cs.meta +11 -11
  248. package/Runtime/Core/Attributes/BaseRelationalComponentAttribute.cs +841 -0
  249. package/Runtime/Core/Attributes/BaseRelationalComponentAttribute.cs.meta +11 -0
  250. package/Runtime/Core/Attributes/ChildComponentAttribute.cs +284 -226
  251. package/Runtime/Core/Attributes/ChildComponentAttribute.cs.meta +11 -11
  252. package/Runtime/Core/Attributes/DxReadOnlyAttribute.cs +6 -6
  253. package/Runtime/Core/Attributes/DxReadOnlyAttribute.cs.meta +11 -11
  254. package/Runtime/Core/Attributes/EnumDisplayNameAttribute.cs +15 -15
  255. package/Runtime/Core/Attributes/EnumDisplayNameAttribute.cs.meta +2 -2
  256. package/Runtime/Core/Attributes/IRelationalComponentAssigner.cs +36 -0
  257. package/Runtime/Core/Attributes/IRelationalComponentAssigner.cs.meta +11 -0
  258. package/Runtime/Core/Attributes/IntDropdownAttribute.cs +14 -14
  259. package/Runtime/Core/Attributes/IntDropdownAttribute.cs.meta +2 -2
  260. package/Runtime/Core/Attributes/KSerializableAttribute.cs +19 -19
  261. package/Runtime/Core/Attributes/KSerializableAttribute.cs.meta +11 -11
  262. package/Runtime/Core/Attributes/NotNullAttribute.cs +30 -32
  263. package/Runtime/Core/Attributes/NotNullAttribute.cs.meta +11 -11
  264. package/Runtime/Core/Attributes/ParentComponentAttribute.cs +376 -0
  265. package/Runtime/Core/Attributes/{ParentComponent.cs.meta → ParentComponentAttribute.cs.meta} +11 -11
  266. package/Runtime/Core/Attributes/RelationalComponentAssigner.cs +152 -0
  267. package/Runtime/Core/Attributes/RelationalComponentAssigner.cs.meta +11 -0
  268. package/Runtime/Core/Attributes/RelationalComponentExtensions.cs +61 -14
  269. package/Runtime/Core/Attributes/RelationalComponentExtensions.cs.meta +11 -11
  270. package/Runtime/Core/Attributes/RelationalComponentInitializer.cs +331 -0
  271. package/Runtime/Core/Attributes/RelationalComponentInitializer.cs.meta +11 -0
  272. package/Runtime/Core/Attributes/ScriptableSingletonPathAttribute.cs +15 -15
  273. package/Runtime/Core/Attributes/ScriptableSingletonPathAttribute.cs.meta +2 -2
  274. package/Runtime/Core/Attributes/SiblingComponentAttribute.cs +264 -137
  275. package/Runtime/Core/Attributes/SiblingComponentAttribute.cs.meta +11 -11
  276. package/Runtime/Core/Attributes/ValidateAssignmentAttribute.cs +115 -106
  277. package/Runtime/Core/Attributes/ValidateAssignmentAttribute.cs.meta +11 -11
  278. package/Runtime/Core/Attributes/ValueHelpers.cs +10 -0
  279. package/Runtime/Core/Attributes/ValueHelpers.cs.meta +3 -0
  280. package/Runtime/Core/Attributes/WShowIfAttribute.cs +24 -24
  281. package/Runtime/Core/Attributes/WShowIfAttribute.cs.meta +2 -2
  282. package/Runtime/Core/Attributes.meta +8 -8
  283. package/Runtime/Core/DataStructure/Adapters/FastVector2Int.cs +192 -92
  284. package/Runtime/Core/DataStructure/Adapters/FastVector2Int.cs.meta +11 -11
  285. package/Runtime/Core/DataStructure/Adapters/FastVector3Int.cs +268 -185
  286. package/Runtime/Core/DataStructure/Adapters/FastVector3Int.cs.meta +11 -11
  287. package/Runtime/Core/DataStructure/Adapters/KGuid.cs +360 -305
  288. package/Runtime/Core/DataStructure/Adapters/KGuid.cs.meta +11 -11
  289. package/Runtime/Core/DataStructure/Adapters/KVector2.cs +146 -80
  290. package/Runtime/Core/DataStructure/Adapters/KVector2.cs.meta +11 -11
  291. package/Runtime/Core/DataStructure/Adapters.meta +8 -8
  292. package/Runtime/Core/DataStructure/BitSet.cs +626 -0
  293. package/Runtime/Core/DataStructure/BitSet.cs.meta +11 -0
  294. package/Runtime/Core/DataStructure/BoundingBox3D.cs +405 -0
  295. package/Runtime/Core/DataStructure/BoundingBox3D.cs.meta +11 -0
  296. package/Runtime/Core/DataStructure/Circle.cs +203 -50
  297. package/Runtime/Core/DataStructure/Circle.cs.meta +11 -11
  298. package/Runtime/Core/DataStructure/CyclicBuffer.cs +488 -266
  299. package/Runtime/Core/DataStructure/CyclicBuffer.cs.meta +11 -11
  300. package/Runtime/Core/DataStructure/Deque.cs +561 -0
  301. package/Runtime/Core/DataStructure/Deque.cs.meta +11 -0
  302. package/Runtime/Core/DataStructure/DisjointSet.cs +483 -0
  303. package/Runtime/Core/DataStructure/DisjointSet.cs.meta +11 -0
  304. package/Runtime/Core/DataStructure/Heap.cs +514 -0
  305. package/Runtime/Core/DataStructure/Heap.cs.meta +11 -0
  306. package/Runtime/Core/DataStructure/{ISpatialTree.cs → ISpatialTree2D.cs} +25 -21
  307. package/Runtime/Core/DataStructure/ISpatialTree2D.cs.meta +11 -0
  308. package/Runtime/Core/DataStructure/ISpatialTree3D.cs +33 -0
  309. package/Runtime/Core/DataStructure/ISpatialTree3D.cs.meta +11 -0
  310. package/Runtime/Core/DataStructure/ImmutableBitSet.cs +398 -0
  311. package/Runtime/Core/DataStructure/ImmutableBitSet.cs.meta +3 -0
  312. package/Runtime/Core/DataStructure/KDTree2D.cs +852 -0
  313. package/Runtime/Core/DataStructure/KDTree2D.cs.meta +11 -0
  314. package/Runtime/Core/DataStructure/KDTree3D.cs +911 -0
  315. package/Runtime/Core/DataStructure/KDTree3D.cs.meta +11 -0
  316. package/Runtime/Core/DataStructure/OctTree3D.cs +983 -0
  317. package/Runtime/Core/DataStructure/OctTree3D.cs.meta +11 -0
  318. package/Runtime/Core/DataStructure/PriorityQueue.cs +194 -0
  319. package/Runtime/Core/DataStructure/PriorityQueue.cs.meta +11 -0
  320. package/Runtime/Core/DataStructure/QuadTree2D.cs +722 -0
  321. package/Runtime/Core/DataStructure/QuadTree2D.cs.meta +11 -0
  322. package/Runtime/Core/DataStructure/RTree2D.cs +704 -0
  323. package/Runtime/Core/DataStructure/{RTree.cs.meta → RTree2D.cs.meta} +11 -11
  324. package/Runtime/Core/DataStructure/RTree3D.cs +775 -0
  325. package/Runtime/Core/DataStructure/RTree3D.cs.meta +11 -0
  326. package/Runtime/Core/DataStructure/SparseSet.cs +597 -0
  327. package/Runtime/Core/DataStructure/SparseSet.cs.meta +11 -0
  328. package/Runtime/Core/DataStructure/SpatialHash2D.cs +312 -0
  329. package/Runtime/Core/DataStructure/SpatialHash2D.cs.meta +3 -0
  330. package/Runtime/Core/DataStructure/SpatialHash3D.cs +341 -0
  331. package/Runtime/Core/DataStructure/SpatialHash3D.cs.meta +11 -0
  332. package/Runtime/Core/DataStructure/Sphere.cs +264 -0
  333. package/Runtime/Core/DataStructure/Sphere.cs.meta +11 -0
  334. package/Runtime/Core/DataStructure/StringWrapper.cs +115 -91
  335. package/Runtime/Core/DataStructure/StringWrapper.cs.meta +11 -11
  336. package/Runtime/Core/DataStructure/TimedCache.cs +88 -66
  337. package/Runtime/Core/DataStructure/TimedCache.cs.meta +11 -11
  338. package/Runtime/Core/DataStructure/Trie.cs +660 -359
  339. package/Runtime/Core/DataStructure/Trie.cs.meta +2 -2
  340. package/Runtime/Core/DataStructure.meta +8 -8
  341. package/Runtime/Core/Extension/AnimatorExtensions.cs +40 -25
  342. package/Runtime/Core/Extension/AnimatorExtensions.cs.meta +11 -11
  343. package/Runtime/Core/Extension/AsyncOperationExtensions.cs +404 -110
  344. package/Runtime/Core/Extension/AsyncOperationExtensions.cs.meta +2 -2
  345. package/Runtime/Core/Extension/CircleExtensions.cs +125 -25
  346. package/Runtime/Core/Extension/CircleExtensions.cs.meta +11 -11
  347. package/Runtime/Core/Extension/ColorExtensions.cs +983 -644
  348. package/Runtime/Core/Extension/ColorExtensions.cs.meta +11 -11
  349. package/Runtime/Core/Extension/DictionaryExtensions.cs +606 -299
  350. package/Runtime/Core/Extension/DictionaryExtensions.cs.meta +11 -11
  351. package/Runtime/Core/Extension/DirectionExtensions.cs +377 -213
  352. package/Runtime/Core/Extension/DirectionExtensions.cs.meta +11 -11
  353. package/Runtime/Core/Extension/EnumExtensions.cs +535 -137
  354. package/Runtime/Core/Extension/EnumExtensions.cs.meta +2 -2
  355. package/Runtime/Core/Extension/IEnumerableExtensions.cs +341 -124
  356. package/Runtime/Core/Extension/IEnumerableExtensions.cs.meta +11 -11
  357. package/Runtime/Core/Extension/IListExtensions.cs +767 -248
  358. package/Runtime/Core/Extension/IListExtensions.cs.meta +11 -11
  359. package/Runtime/Core/Extension/IReadonlyListExtensions.cs +687 -37
  360. package/Runtime/Core/Extension/IReadonlyListExtensions.cs.meta +2 -2
  361. package/Runtime/Core/Extension/ProtoEqualityExtensions.cs +292 -0
  362. package/Runtime/Core/Extension/ProtoEqualityExtensions.cs.meta +3 -0
  363. package/Runtime/Core/Extension/RandomExtensions.cs +1006 -109
  364. package/Runtime/Core/Extension/RandomExtensions.cs.meta +11 -11
  365. package/Runtime/Core/Extension/StringExtensions.cs +1635 -239
  366. package/Runtime/Core/Extension/StringExtensions.cs.meta +11 -11
  367. package/Runtime/Core/Extension/UnityExtensions.cs +4555 -1689
  368. package/Runtime/Core/Extension/UnityExtensions.cs.meta +11 -11
  369. package/Runtime/Core/Extension/WallstopStudiosLogger.cs +287 -245
  370. package/Runtime/Core/Extension/WallstopStudiosLogger.cs.meta +11 -11
  371. package/Runtime/Core/Extension.meta +8 -8
  372. package/Runtime/Core/Helper/ArrayConverter.cs +73 -39
  373. package/Runtime/Core/Helper/ArrayConverter.cs.meta +2 -2
  374. package/Runtime/Core/Helper/AssignUtilities.cs +33 -14
  375. package/Runtime/Core/Helper/AssignUtilities.cs.meta +11 -11
  376. package/Runtime/Core/Helper/DirectoryHelper.cs +210 -196
  377. package/Runtime/Core/Helper/DirectoryHelper.cs.meta +2 -2
  378. package/Runtime/Core/Helper/Enumerables.cs +51 -17
  379. package/Runtime/Core/Helper/Enumerables.cs.meta +11 -11
  380. package/Runtime/Core/Helper/FileHelper.cs +97 -77
  381. package/Runtime/Core/Helper/FileHelper.cs.meta +2 -2
  382. package/Runtime/Core/Helper/FormattingHelpers.cs +49 -38
  383. package/Runtime/Core/Helper/FormattingHelpers.cs.meta +2 -2
  384. package/Runtime/Core/Helper/FuncBasedComparer.cs +29 -0
  385. package/Runtime/Core/Helper/FuncBasedComparer.cs.meta +3 -0
  386. package/Runtime/Core/Helper/Geometry.cs +65 -43
  387. package/Runtime/Core/Helper/Geometry.cs.meta +11 -11
  388. package/Runtime/Core/Helper/Helpers.cs +1271 -831
  389. package/Runtime/Core/Helper/Helpers.cs.meta +11 -11
  390. package/Runtime/Core/Helper/IterationHelpers.cs +83 -32
  391. package/Runtime/Core/Helper/IterationHelpers.cs.meta +11 -11
  392. package/Runtime/Core/Helper/LifetimeHelpers.cs +20 -13
  393. package/Runtime/Core/Helper/LifetimeHelpers.cs.meta +11 -11
  394. package/Runtime/Core/Helper/LineHelper.cs +259 -194
  395. package/Runtime/Core/Helper/LineHelper.cs.meta +2 -2
  396. package/Runtime/Core/Helper/Logging/UnityLogTagFormatter.cs +549 -539
  397. package/Runtime/Core/Helper/Logging/UnityLogTagFormatter.cs.meta +2 -2
  398. package/Runtime/Core/Helper/Logging.meta +2 -2
  399. package/Runtime/Core/Helper/Objects.cs +477 -769
  400. package/Runtime/Core/Helper/Objects.cs.meta +11 -11
  401. package/Runtime/Core/Helper/Partials/LogHelpers.cs +13 -13
  402. package/Runtime/Core/Helper/Partials/LogHelpers.cs.meta +2 -2
  403. package/Runtime/Core/Helper/Partials/MathHelpers.cs +45 -30
  404. package/Runtime/Core/Helper/Partials/MathHelpers.cs.meta +2 -2
  405. package/Runtime/Core/Helper/Partials/ObjectHelpers.cs +509 -400
  406. package/Runtime/Core/Helper/Partials/ObjectHelpers.cs.meta +2 -2
  407. package/Runtime/Core/Helper/Partials/TransformHelpers.cs +393 -377
  408. package/Runtime/Core/Helper/Partials/TransformHelpers.cs.meta +2 -2
  409. package/Runtime/Core/Helper/Partials.meta +2 -2
  410. package/Runtime/Core/Helper/PathHelper.cs +42 -15
  411. package/Runtime/Core/Helper/PathHelper.cs.meta +2 -2
  412. package/Runtime/Core/Helper/ReflectionHelpers.cs +5298 -1963
  413. package/Runtime/Core/Helper/ReflectionHelpers.cs.meta +2 -2
  414. package/Runtime/Core/Helper/ReverseComparer.cs +33 -0
  415. package/Runtime/Core/Helper/ReverseComparer.cs.meta +3 -0
  416. package/Runtime/Core/Helper/SceneHelper.cs +251 -224
  417. package/Runtime/Core/Helper/SceneHelper.cs.meta +2 -2
  418. package/Runtime/Core/Helper/SpriteHelpers.cs +52 -41
  419. package/Runtime/Core/Helper/SpriteHelpers.cs.meta +11 -11
  420. package/Runtime/Core/Helper/StringInList.cs +61 -35
  421. package/Runtime/Core/Helper/StringInList.cs.meta +11 -11
  422. package/Runtime/Core/Helper/TestAssemblyHelper.cs +134 -0
  423. package/Runtime/Core/Helper/TestAssemblyHelper.cs.meta +11 -0
  424. package/Runtime/Core/Helper/UnityMainThreadDispatcher.cs +144 -82
  425. package/Runtime/Core/Helper/UnityMainThreadDispatcher.cs.meta +2 -2
  426. package/Runtime/Core/Helper/WallMath.cs +672 -166
  427. package/Runtime/Core/Helper/WallMath.cs.meta +11 -11
  428. package/Runtime/Core/Helper.meta +8 -8
  429. package/Runtime/Core/Math/Line2D.cs +263 -0
  430. package/Runtime/Core/Math/Line2D.cs.meta +11 -0
  431. package/Runtime/Core/Math/Line3D.cs +452 -0
  432. package/Runtime/Core/Math/Line3D.cs.meta +11 -0
  433. package/Runtime/Core/Math/Parabola.cs +241 -47
  434. package/Runtime/Core/Math/Parabola.cs.meta +11 -11
  435. package/Runtime/Core/Math/PointPolygonCheck.cs +175 -36
  436. package/Runtime/Core/Math/PointPolygonCheck.cs.meta +11 -11
  437. package/Runtime/Core/Math/Range.cs +157 -92
  438. package/Runtime/Core/Math/Range.cs.meta +11 -11
  439. package/Runtime/Core/Math.meta +8 -8
  440. package/Runtime/Core/Model/Direction.cs +25 -43
  441. package/Runtime/Core/Model/Direction.cs.meta +11 -11
  442. package/Runtime/Core/Model.meta +8 -8
  443. package/Runtime/Core/OneOf/FastOneOf.cs +252 -152
  444. package/Runtime/Core/OneOf/FastOneOf.cs.meta +11 -11
  445. package/Runtime/Core/OneOf/FastOneOf2.cs +198 -0
  446. package/Runtime/Core/OneOf/FastOneOf2.cs.meta +11 -0
  447. package/Runtime/Core/OneOf/FastOneOf4.cs +324 -0
  448. package/Runtime/Core/OneOf/FastOneOf4.cs.meta +11 -0
  449. package/Runtime/Core/OneOf/None.cs +30 -4
  450. package/Runtime/Core/OneOf/None.cs.meta +11 -11
  451. package/Runtime/Core/OneOf.meta +8 -8
  452. package/Runtime/Core/Random/AbstractRandom.cs +1318 -655
  453. package/Runtime/Core/Random/AbstractRandom.cs.meta +11 -11
  454. package/Runtime/Core/Random/DotNetRandom.cs +118 -54
  455. package/Runtime/Core/Random/DotNetRandom.cs.meta +2 -2
  456. package/Runtime/Core/Random/IRandom.cs +203 -161
  457. package/Runtime/Core/Random/IRandom.cs.meta +11 -11
  458. package/Runtime/Core/Random/IllusionFlow.cs +171 -107
  459. package/Runtime/Core/Random/IllusionFlow.cs.meta +2 -2
  460. package/Runtime/Core/Random/LinearCongruentialGenerator.cs +90 -49
  461. package/Runtime/Core/Random/LinearCongruentialGenerator.cs.meta +2 -2
  462. package/Runtime/Core/Random/NativePcgRandom.cs +139 -97
  463. package/Runtime/Core/Random/NativePcgRandom.cs.meta +11 -11
  464. package/Runtime/Core/Random/PRNG.cs +21 -7
  465. package/Runtime/Core/Random/PRNG.cs.meta +2 -2
  466. package/Runtime/Core/Random/PcgRandom.cs +243 -149
  467. package/Runtime/Core/Random/PcgRandom.cs.meta +11 -11
  468. package/Runtime/Core/Random/PerlinNoise.cs +369 -369
  469. package/Runtime/Core/Random/PerlinNoise.cs.meta +2 -2
  470. package/Runtime/Core/Random/RandomComparer.cs +34 -0
  471. package/Runtime/Core/Random/RandomComparer.cs.meta +3 -0
  472. package/Runtime/Core/Random/RandomState.cs +206 -131
  473. package/Runtime/Core/Random/RandomState.cs.meta +11 -11
  474. package/Runtime/Core/Random/RandomUtilities.cs +55 -26
  475. package/Runtime/Core/Random/RandomUtilities.cs.meta +11 -11
  476. package/Runtime/Core/Random/RomuDuo.cs +171 -116
  477. package/Runtime/Core/Random/RomuDuo.cs.meta +2 -2
  478. package/Runtime/Core/Random/SplitMix64.cs +134 -94
  479. package/Runtime/Core/Random/SplitMix64.cs.meta +2 -2
  480. package/Runtime/Core/Random/SquirrelRandom.cs +127 -84
  481. package/Runtime/Core/Random/SquirrelRandom.cs.meta +11 -11
  482. package/Runtime/Core/Random/SystemRandom.cs +203 -162
  483. package/Runtime/Core/Random/SystemRandom.cs.meta +11 -11
  484. package/Runtime/Core/Random/ThreadLocalRandom.cs +25 -12
  485. package/Runtime/Core/Random/ThreadLocalRandom.cs.meta +11 -11
  486. package/Runtime/Core/Random/UnityRandom.cs +109 -57
  487. package/Runtime/Core/Random/UnityRandom.cs.meta +11 -11
  488. package/Runtime/Core/Random/WyRandom.cs +158 -121
  489. package/Runtime/Core/Random/WyRandom.cs.meta +2 -2
  490. package/Runtime/Core/Random/XorShiftRandom.cs +106 -52
  491. package/Runtime/Core/Random/XorShiftRandom.cs.meta +11 -11
  492. package/Runtime/Core/Random/XoroShiroRandom.cs +184 -119
  493. package/Runtime/Core/Random/XoroShiroRandom.cs.meta +2 -2
  494. package/Runtime/Core/Random.meta +8 -8
  495. package/Runtime/Core/Serialization/JsonConverters/AnimationCurveConverter.cs +248 -0
  496. package/Runtime/Core/Serialization/JsonConverters/AnimationCurveConverter.cs.meta +11 -0
  497. package/Runtime/Core/Serialization/JsonConverters/BitSetConverter.cs +119 -0
  498. package/Runtime/Core/Serialization/JsonConverters/BitSetConverter.cs.meta +11 -0
  499. package/Runtime/Core/Serialization/JsonConverters/BoundingSphereConverter.cs +74 -0
  500. package/Runtime/Core/Serialization/JsonConverters/BoundingSphereConverter.cs.meta +11 -0
  501. package/Runtime/Core/Serialization/JsonConverters/BoundsConverter.cs +132 -0
  502. package/Runtime/Core/Serialization/JsonConverters/BoundsConverter.cs.meta +11 -0
  503. package/Runtime/Core/Serialization/JsonConverters/BoundsIntConverter.cs +135 -0
  504. package/Runtime/Core/Serialization/JsonConverters/BoundsIntConverter.cs.meta +11 -0
  505. package/Runtime/Core/Serialization/JsonConverters/Color32Converter.cs +98 -0
  506. package/Runtime/Core/Serialization/JsonConverters/Color32Converter.cs.meta +11 -0
  507. package/Runtime/Core/Serialization/JsonConverters/ColorBlockConverter.cs +123 -0
  508. package/Runtime/Core/Serialization/JsonConverters/ColorBlockConverter.cs.meta +11 -0
  509. package/Runtime/Core/Serialization/JsonConverters/ColorConverter.cs +88 -88
  510. package/Runtime/Core/Serialization/JsonConverters/ColorConverter.cs.meta +2 -2
  511. package/Runtime/Core/Serialization/JsonConverters/CyclicBufferConverterFactory.cs +112 -0
  512. package/Runtime/Core/Serialization/JsonConverters/CyclicBufferConverterFactory.cs.meta +11 -0
  513. package/Runtime/Core/Serialization/JsonConverters/DequeConverterFactory.cs +62 -0
  514. package/Runtime/Core/Serialization/JsonConverters/DequeConverterFactory.cs.meta +11 -0
  515. package/Runtime/Core/Serialization/JsonConverters/FastVector2IntConverter.cs +72 -0
  516. package/Runtime/Core/Serialization/JsonConverters/FastVector2IntConverter.cs.meta +11 -0
  517. package/Runtime/Core/Serialization/JsonConverters/FastVector3IntConverter.cs +80 -0
  518. package/Runtime/Core/Serialization/JsonConverters/FastVector3IntConverter.cs.meta +11 -0
  519. package/Runtime/Core/Serialization/JsonConverters/GameObjectConverter.cs +44 -36
  520. package/Runtime/Core/Serialization/JsonConverters/GameObjectConverter.cs.meta +2 -2
  521. package/Runtime/Core/Serialization/JsonConverters/GradientConverter.cs +245 -0
  522. package/Runtime/Core/Serialization/JsonConverters/GradientConverter.cs.meta +11 -0
  523. package/Runtime/Core/Serialization/JsonConverters/Hash128Converter.cs +92 -0
  524. package/Runtime/Core/Serialization/JsonConverters/Hash128Converter.cs.meta +11 -0
  525. package/Runtime/Core/Serialization/JsonConverters/ImmutableBitSetConverter.cs +119 -0
  526. package/Runtime/Core/Serialization/JsonConverters/ImmutableBitSetConverter.cs.meta +11 -0
  527. package/Runtime/Core/Serialization/JsonConverters/KVector2Converter.cs +72 -0
  528. package/Runtime/Core/Serialization/JsonConverters/KVector2Converter.cs.meta +11 -0
  529. package/Runtime/Core/Serialization/JsonConverters/LayerMaskConverter.cs +95 -0
  530. package/Runtime/Core/Serialization/JsonConverters/LayerMaskConverter.cs.meta +11 -0
  531. package/Runtime/Core/Serialization/JsonConverters/Matrix4x4Converter.cs +237 -218
  532. package/Runtime/Core/Serialization/JsonConverters/Matrix4x4Converter.cs.meta +2 -2
  533. package/Runtime/Core/Serialization/JsonConverters/MinMaxCurveConverter.cs +142 -0
  534. package/Runtime/Core/Serialization/JsonConverters/MinMaxCurveConverter.cs.meta +11 -0
  535. package/Runtime/Core/Serialization/JsonConverters/MinMaxGradientConverter.cs +135 -0
  536. package/Runtime/Core/Serialization/JsonConverters/MinMaxGradientConverter.cs.meta +11 -0
  537. package/Runtime/Core/Serialization/JsonConverters/PlaneConverter.cs +79 -0
  538. package/Runtime/Core/Serialization/JsonConverters/PlaneConverter.cs.meta +11 -0
  539. package/Runtime/Core/Serialization/JsonConverters/PoseConverter.cs +76 -0
  540. package/Runtime/Core/Serialization/JsonConverters/PoseConverter.cs.meta +11 -0
  541. package/Runtime/Core/Serialization/JsonConverters/QuaternionConverter.cs +88 -0
  542. package/Runtime/Core/Serialization/JsonConverters/QuaternionConverter.cs.meta +11 -0
  543. package/Runtime/Core/Serialization/JsonConverters/RangeConverterFactory.cs +106 -0
  544. package/Runtime/Core/Serialization/JsonConverters/RangeConverterFactory.cs.meta +11 -0
  545. package/Runtime/Core/Serialization/JsonConverters/RangeIntConverter.cs +71 -0
  546. package/Runtime/Core/Serialization/JsonConverters/RangeIntConverter.cs.meta +11 -0
  547. package/Runtime/Core/Serialization/JsonConverters/Ray2DConverter.cs +80 -0
  548. package/Runtime/Core/Serialization/JsonConverters/Ray2DConverter.cs.meta +11 -0
  549. package/Runtime/Core/Serialization/JsonConverters/RayConverter.cs +76 -0
  550. package/Runtime/Core/Serialization/JsonConverters/RayConverter.cs.meta +11 -0
  551. package/Runtime/Core/Serialization/JsonConverters/RaycastHitConverter.cs +115 -0
  552. package/Runtime/Core/Serialization/JsonConverters/RaycastHitConverter.cs.meta +11 -0
  553. package/Runtime/Core/Serialization/JsonConverters/RectConverter.cs +84 -0
  554. package/Runtime/Core/Serialization/JsonConverters/RectConverter.cs.meta +11 -0
  555. package/Runtime/Core/Serialization/JsonConverters/RectIntConverter.cs +88 -0
  556. package/Runtime/Core/Serialization/JsonConverters/RectIntConverter.cs.meta +11 -0
  557. package/Runtime/Core/Serialization/JsonConverters/RectOffsetConverter.cs +87 -0
  558. package/Runtime/Core/Serialization/JsonConverters/RectOffsetConverter.cs.meta +11 -0
  559. package/Runtime/Core/Serialization/JsonConverters/RenderTextureDescriptorConverter.cs +264 -0
  560. package/Runtime/Core/Serialization/JsonConverters/RenderTextureDescriptorConverter.cs.meta +11 -0
  561. package/Runtime/Core/Serialization/JsonConverters/ResolutionConverter.cs +158 -0
  562. package/Runtime/Core/Serialization/JsonConverters/ResolutionConverter.cs.meta +11 -0
  563. package/Runtime/Core/Serialization/JsonConverters/SceneConverter.cs +103 -0
  564. package/Runtime/Core/Serialization/JsonConverters/SceneConverter.cs.meta +11 -0
  565. package/Runtime/Core/Serialization/JsonConverters/SphericalHarmonicsL2Converter.cs +121 -0
  566. package/Runtime/Core/Serialization/JsonConverters/SphericalHarmonicsL2Converter.cs.meta +11 -0
  567. package/Runtime/Core/Serialization/JsonConverters/TouchConverter.cs +54 -0
  568. package/Runtime/Core/Serialization/JsonConverters/TouchConverter.cs.meta +11 -0
  569. package/Runtime/Core/Serialization/JsonConverters/TypeConverter.cs +30 -28
  570. package/Runtime/Core/Serialization/JsonConverters/TypeConverter.cs.meta +2 -2
  571. package/Runtime/Core/Serialization/JsonConverters/Vector2Converter.cs +72 -74
  572. package/Runtime/Core/Serialization/JsonConverters/Vector2Converter.cs.meta +11 -11
  573. package/Runtime/Core/Serialization/JsonConverters/Vector2IntConverter.cs +72 -0
  574. package/Runtime/Core/Serialization/JsonConverters/Vector2IntConverter.cs.meta +11 -0
  575. package/Runtime/Core/Serialization/JsonConverters/Vector3Converter.cs +80 -81
  576. package/Runtime/Core/Serialization/JsonConverters/Vector3Converter.cs.meta +11 -11
  577. package/Runtime/Core/Serialization/JsonConverters/Vector3IntConverter.cs +80 -0
  578. package/Runtime/Core/Serialization/JsonConverters/Vector3IntConverter.cs.meta +11 -0
  579. package/Runtime/Core/Serialization/JsonConverters/Vector4Converter.cs +88 -88
  580. package/Runtime/Core/Serialization/JsonConverters/Vector4Converter.cs.meta +2 -2
  581. package/Runtime/Core/Serialization/JsonConverters.meta +8 -8
  582. package/Runtime/Core/Serialization/ProtobufUnitySurrogates.cs +383 -0
  583. package/Runtime/Core/Serialization/ProtobufUnitySurrogates.cs.meta +11 -0
  584. package/Runtime/Core/Serialization/Serializer.cs +2121 -195
  585. package/Runtime/Core/Serialization/Serializer.cs.meta +11 -11
  586. package/Runtime/Core/Serialization.meta +8 -8
  587. package/Runtime/Core/Threading/SingleThreadedThreadPool.cs +228 -228
  588. package/Runtime/Core/Threading/SingleThreadedThreadPool.cs.meta +11 -11
  589. package/Runtime/Core/Threading.meta +8 -8
  590. package/Runtime/Core.meta +8 -8
  591. package/Runtime/Integrations/VContainer/AssemblyInfo.cs +9 -0
  592. package/Runtime/Integrations/VContainer/AssemblyInfo.cs.meta +3 -0
  593. package/Runtime/Integrations/VContainer/ObjectResolverRelationalExtensions.cs +281 -0
  594. package/Runtime/Integrations/VContainer/ObjectResolverRelationalExtensions.cs.meta +11 -0
  595. package/Runtime/Integrations/VContainer/RelationalComponentEntryPoint.cs +189 -0
  596. package/Runtime/Integrations/VContainer/RelationalComponentEntryPoint.cs.meta +11 -0
  597. package/Runtime/Integrations/VContainer/RelationalComponentsBuilderExtensions.cs +90 -0
  598. package/Runtime/Integrations/VContainer/RelationalComponentsBuilderExtensions.cs.meta +11 -0
  599. package/Runtime/Integrations/VContainer/RelationalObjectPools.cs +114 -0
  600. package/Runtime/Integrations/VContainer/RelationalObjectPools.cs.meta +11 -0
  601. package/Runtime/Integrations/VContainer/RelationalSceneAssignmentOptions.cs +95 -0
  602. package/Runtime/Integrations/VContainer/RelationalSceneAssignmentOptions.cs.meta +11 -0
  603. package/Runtime/Integrations/VContainer/RelationalSceneLoadListener.cs +241 -0
  604. package/Runtime/Integrations/VContainer/RelationalSceneLoadListener.cs.meta +11 -0
  605. package/Runtime/Integrations/VContainer/WallstopStudios.UnityHelpers.Integration.VContainer.asmdef +30 -0
  606. package/Runtime/Integrations/VContainer/WallstopStudios.UnityHelpers.Integration.VContainer.asmdef.meta +7 -0
  607. package/Runtime/Integrations/VContainer.meta +8 -0
  608. package/Runtime/Integrations/Zenject/AssemblyInfo.cs +9 -0
  609. package/Runtime/Integrations/Zenject/AssemblyInfo.cs.meta +3 -0
  610. package/Runtime/Integrations/Zenject/DiContainerRelationalExtensions.cs +247 -0
  611. package/Runtime/Integrations/Zenject/DiContainerRelationalExtensions.cs.meta +11 -0
  612. package/Runtime/Integrations/Zenject/RelationalComponentSceneInitializer.cs +182 -0
  613. package/Runtime/Integrations/Zenject/RelationalComponentSceneInitializer.cs.meta +11 -0
  614. package/Runtime/Integrations/Zenject/RelationalComponentsInstaller.cs +94 -0
  615. package/Runtime/Integrations/Zenject/RelationalComponentsInstaller.cs.meta +11 -0
  616. package/Runtime/Integrations/Zenject/RelationalMemoryPools.cs +44 -0
  617. package/Runtime/Integrations/Zenject/RelationalMemoryPools.cs.meta +11 -0
  618. package/Runtime/Integrations/Zenject/RelationalSceneAssignmentOptions.cs +93 -0
  619. package/Runtime/Integrations/Zenject/RelationalSceneAssignmentOptions.cs.meta +11 -0
  620. package/Runtime/Integrations/Zenject/RelationalSceneLoadListener.cs +243 -0
  621. package/Runtime/Integrations/Zenject/RelationalSceneLoadListener.cs.meta +11 -0
  622. package/Runtime/Integrations/Zenject/WallstopStudios.UnityHelpers.Integration.Zenject.asmdef +30 -0
  623. package/Runtime/Integrations/Zenject/WallstopStudios.UnityHelpers.Integration.Zenject.asmdef.meta +7 -0
  624. package/Runtime/Integrations/Zenject.meta +8 -0
  625. package/Runtime/Integrations.meta +8 -0
  626. package/Runtime/Protobuf-Net/System.Collections.Immutable.dll.meta +33 -33
  627. package/Runtime/Protobuf-Net/System.Runtime.CompilerServices.Unsafe.dll.meta +33 -33
  628. package/Runtime/Protobuf-Net/protobuf-net.Core.dll.meta +33 -33
  629. package/Runtime/Protobuf-Net/protobuf-net.dll.meta +33 -33
  630. package/Runtime/Protobuf-Net.meta +8 -8
  631. package/Runtime/Tags/AlwaysIncludeInAttributeMetadataCacheAttribute.cs +11 -0
  632. package/Runtime/Tags/AlwaysIncludeInAttributeMetadataCacheAttribute.cs.meta +11 -0
  633. package/Runtime/Tags/Attribute.cs +399 -205
  634. package/Runtime/Tags/Attribute.cs.meta +2 -2
  635. package/Runtime/Tags/AttributeEffect.cs +372 -281
  636. package/Runtime/Tags/AttributeEffect.cs.meta +2 -2
  637. package/Runtime/Tags/AttributeMetadataCache.cs +500 -0
  638. package/Runtime/Tags/AttributeMetadataCache.cs.meta +11 -0
  639. package/Runtime/Tags/AttributeMetadataFilters.cs +108 -0
  640. package/Runtime/Tags/AttributeMetadataFilters.cs.meta +11 -0
  641. package/Runtime/Tags/AttributeModification.cs +132 -48
  642. package/Runtime/Tags/AttributeModification.cs.meta +2 -2
  643. package/Runtime/Tags/AttributeUtilities.cs +376 -209
  644. package/Runtime/Tags/AttributeUtilities.cs.meta +2 -2
  645. package/Runtime/Tags/AttributesComponent.cs +237 -163
  646. package/Runtime/Tags/AttributesComponent.cs.meta +2 -2
  647. package/Runtime/Tags/CollisionSenses.cs +117 -91
  648. package/Runtime/Tags/CollisionSenses.cs.meta +2 -2
  649. package/Runtime/Tags/CosmeticEffectComponent.cs +112 -50
  650. package/Runtime/Tags/CosmeticEffectComponent.cs.meta +2 -2
  651. package/Runtime/Tags/CosmeticEffectData.cs +109 -63
  652. package/Runtime/Tags/CosmeticEffectData.cs.meta +2 -2
  653. package/Runtime/Tags/EffectHandle.cs +150 -65
  654. package/Runtime/Tags/EffectHandle.cs.meta +2 -2
  655. package/Runtime/Tags/EffectHandler.cs +470 -393
  656. package/Runtime/Tags/EffectHandler.cs.meta +2 -2
  657. package/Runtime/Tags/ModificationAction.cs +60 -9
  658. package/Runtime/Tags/ModificationAction.cs.meta +2 -2
  659. package/Runtime/Tags/ModifierDurationType.cs +71 -13
  660. package/Runtime/Tags/ModifierDurationType.cs.meta +2 -2
  661. package/Runtime/Tags/TagHandler.cs +373 -158
  662. package/Runtime/Tags/TagHandler.cs.meta +2 -2
  663. package/Runtime/Tags.meta +2 -2
  664. package/Runtime/Utils/AnimationEventEqualityComparer.cs +198 -161
  665. package/Runtime/Utils/AnimationEventEqualityComparer.cs.meta +11 -11
  666. package/Runtime/Utils/AnimatorEnumStateMachine.cs +110 -88
  667. package/Runtime/Utils/AnimatorEnumStateMachine.cs.meta +11 -11
  668. package/Runtime/Utils/Ascii85.cs +132 -115
  669. package/Runtime/Utils/Ascii85.cs.meta +2 -2
  670. package/Runtime/Utils/Buffers.cs +1151 -550
  671. package/Runtime/Utils/Buffers.cs.meta +11 -11
  672. package/Runtime/Utils/CenterPointOffset.cs +35 -30
  673. package/Runtime/Utils/CenterPointOffset.cs.meta +2 -2
  674. package/Runtime/Utils/ChildSpawner.cs +250 -157
  675. package/Runtime/Utils/ChildSpawner.cs.meta +2 -2
  676. package/Runtime/Utils/CircleLineRenderer.cs +142 -142
  677. package/Runtime/Utils/CircleLineRenderer.cs.meta +11 -11
  678. package/Runtime/Utils/CollisionProxy.cs +48 -48
  679. package/Runtime/Utils/CollisionProxy.cs.meta +2 -2
  680. package/Runtime/Utils/CoroutineHandler.cs +4 -4
  681. package/Runtime/Utils/CoroutineHandler.cs.meta +2 -2
  682. package/Runtime/Utils/DeferredDisposalResult.cs +20 -23
  683. package/Runtime/Utils/DeferredDisposalResult.cs.meta +2 -2
  684. package/Runtime/Utils/LZMA.cs +276 -53
  685. package/Runtime/Utils/LZMA.cs.meta +2 -2
  686. package/Runtime/Utils/MatchColliderToSprite.cs +104 -104
  687. package/Runtime/Utils/MatchColliderToSprite.cs.meta +2 -2
  688. package/Runtime/Utils/MatchTransform.cs +99 -82
  689. package/Runtime/Utils/MatchTransform.cs.meta +2 -2
  690. package/Runtime/Utils/Oscillator.cs +27 -27
  691. package/Runtime/Utils/Oscillator.cs.meta +11 -11
  692. package/Runtime/Utils/PolygonCollider2DOptimizer.cs +104 -83
  693. package/Runtime/Utils/PolygonCollider2DOptimizer.cs.meta +2 -2
  694. package/Runtime/Utils/RuntimeSingleton.cs +139 -89
  695. package/Runtime/Utils/RuntimeSingleton.cs.meta +11 -11
  696. package/Runtime/Utils/ScriptableObjectSingleton.cs +225 -85
  697. package/Runtime/Utils/ScriptableObjectSingleton.cs.meta +2 -2
  698. package/Runtime/Utils/SerializedStringComparer.cs +107 -107
  699. package/Runtime/Utils/SerializedStringComparer.cs.meta +2 -2
  700. package/Runtime/Utils/SetTextureImportData.cs +71 -69
  701. package/Runtime/Utils/SetTextureImportData.cs.meta +11 -11
  702. package/Runtime/Utils/SevenZip/Common/CRC.cs +70 -70
  703. package/Runtime/Utils/SevenZip/Common/CRC.cs.meta +11 -11
  704. package/Runtime/Utils/SevenZip/Common/InBuffer.cs +84 -84
  705. package/Runtime/Utils/SevenZip/Common/InBuffer.cs.meta +11 -11
  706. package/Runtime/Utils/SevenZip/Common/OutBuffer.cs +70 -70
  707. package/Runtime/Utils/SevenZip/Common/OutBuffer.cs.meta +11 -11
  708. package/Runtime/Utils/SevenZip/Common.meta +2 -2
  709. package/Runtime/Utils/SevenZip/Compress/LZ/IMatchFinder.cs +28 -28
  710. package/Runtime/Utils/SevenZip/Compress/LZ/IMatchFinder.cs.meta +11 -11
  711. package/Runtime/Utils/SevenZip/Compress/LZ/LzBinTree.cs +454 -454
  712. package/Runtime/Utils/SevenZip/Compress/LZ/LzBinTree.cs.meta +11 -11
  713. package/Runtime/Utils/SevenZip/Compress/LZ/LzInWindow.cs +179 -179
  714. package/Runtime/Utils/SevenZip/Compress/LZ/LzInWindow.cs.meta +11 -11
  715. package/Runtime/Utils/SevenZip/Compress/LZ/LzOutWindow.cs +137 -137
  716. package/Runtime/Utils/SevenZip/Compress/LZ/LzOutWindow.cs.meta +11 -11
  717. package/Runtime/Utils/SevenZip/Compress/LZ.meta +8 -8
  718. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaBase.cs +110 -110
  719. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaBase.cs.meta +11 -11
  720. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaDecoder.cs +525 -527
  721. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaDecoder.cs.meta +11 -11
  722. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaEncoder.cs +1891 -1904
  723. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaEncoder.cs.meta +11 -11
  724. package/Runtime/Utils/SevenZip/Compress/LZMA.meta +8 -8
  725. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoder.cs +242 -242
  726. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoder.cs.meta +11 -11
  727. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoderBit.cs +146 -149
  728. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoderBit.cs.meta +11 -11
  729. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoderBitTree.cs +177 -177
  730. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoderBitTree.cs.meta +11 -11
  731. package/Runtime/Utils/SevenZip/Compress/RangeCoder.meta +8 -8
  732. package/Runtime/Utils/SevenZip/Compress.meta +8 -8
  733. package/Runtime/Utils/SevenZip/ICoder.cs +177 -177
  734. package/Runtime/Utils/SevenZip/ICoder.cs.meta +11 -11
  735. package/Runtime/Utils/SevenZip.meta +2 -2
  736. package/Runtime/Utils/SpriteRendererMetadata.cs +346 -370
  737. package/Runtime/Utils/SpriteRendererMetadata.cs.meta +2 -2
  738. package/Runtime/Utils/SpriteRendererSyncer.cs +100 -100
  739. package/Runtime/Utils/SpriteRendererSyncer.cs.meta +2 -2
  740. package/Runtime/Utils/StartTracker.cs +15 -15
  741. package/Runtime/Utils/StartTracker.cs.meta +2 -2
  742. package/Runtime/Utils/TextureScale.cs +364 -179
  743. package/Runtime/Utils/TextureScale.cs.meta +2 -2
  744. package/Runtime/Utils/TypeNameSorter.cs +17 -17
  745. package/Runtime/Utils/TypeNameSorter.cs.meta +2 -2
  746. package/Runtime/Utils/UnityObjectNameComparer.cs +89 -89
  747. package/Runtime/Utils/UnityObjectNameComparer.cs.meta +2 -2
  748. package/Runtime/Utils.meta +8 -8
  749. package/Runtime/Visuals/AnimatedSpriteLayer.cs +217 -130
  750. package/Runtime/Visuals/AnimatedSpriteLayer.cs.meta +2 -2
  751. package/Runtime/Visuals/UGUI/EnhancedImage.cs +224 -85
  752. package/Runtime/Visuals/UGUI/EnhancedImage.cs.meta +2 -2
  753. package/Runtime/Visuals/UGUI.meta +2 -2
  754. package/Runtime/Visuals/UIToolkit/LayeredImage.cs +784 -484
  755. package/Runtime/Visuals/UIToolkit/LayeredImage.cs.meta +2 -2
  756. package/Runtime/Visuals/UIToolkit/MultiFileSelectorElement.cs +945 -322
  757. package/Runtime/Visuals/UIToolkit/MultiFileSelectorElement.cs.meta +2 -2
  758. package/Runtime/Visuals/UIToolkit.meta +2 -2
  759. package/Runtime/Visuals.meta +2 -2
  760. package/Runtime/WallstopStudios.UnityHelpers.asmdef +22 -14
  761. package/Runtime/WallstopStudios.UnityHelpers.asmdef.meta +7 -7
  762. package/Runtime.meta +8 -8
  763. package/SERIALIZATION.md +663 -0
  764. package/SERIALIZATION.md.meta +7 -0
  765. package/SINGLETONS.md +427 -0
  766. package/SINGLETONS.md.meta +7 -0
  767. package/SPATIAL_TREES_2D_GUIDE.md +261 -0
  768. package/SPATIAL_TREES_2D_GUIDE.md.meta +7 -0
  769. package/SPATIAL_TREES_3D_GUIDE.md +214 -0
  770. package/SPATIAL_TREES_3D_GUIDE.md.meta +7 -0
  771. package/SPATIAL_TREE_2D_PERFORMANCE.md +241 -0
  772. package/SPATIAL_TREE_2D_PERFORMANCE.md.meta +7 -0
  773. package/SPATIAL_TREE_3D_PERFORMANCE.md +243 -0
  774. package/SPATIAL_TREE_3D_PERFORMANCE.md.meta +7 -0
  775. package/SPATIAL_TREE_SEMANTICS.md +106 -0
  776. package/SPATIAL_TREE_SEMANTICS.md.meta +7 -0
  777. package/Samples~/DI - VContainer/Prefabs/RelationalConsumer.prefab +77 -0
  778. package/Samples~/DI - VContainer/Prefabs/RelationalConsumer.prefab.meta +8 -0
  779. package/Samples~/DI - VContainer/Prefabs/Spawner.prefab +47 -0
  780. package/Samples~/DI - VContainer/Prefabs/Spawner.prefab.meta +8 -0
  781. package/Samples~/DI - VContainer/Prefabs.meta +9 -0
  782. package/Samples~/DI - VContainer/README.md +515 -0
  783. package/Samples~/DI - VContainer/README.md.meta +8 -0
  784. package/Samples~/DI - VContainer/Scenes/VContainer_Sample.unity +120 -0
  785. package/Samples~/DI - VContainer/Scenes/VContainer_Sample.unity.meta +8 -0
  786. package/Samples~/DI - VContainer/Scenes.meta +9 -0
  787. package/Samples~/DI - VContainer/Scripts/GameLifetimeScope.cs +42 -0
  788. package/Samples~/DI - VContainer/Scripts/GameLifetimeScope.cs.meta +12 -0
  789. package/Samples~/DI - VContainer/Scripts/RelationalConsumer.cs +24 -0
  790. package/Samples~/DI - VContainer/Scripts/RelationalConsumer.cs.meta +12 -0
  791. package/Samples~/DI - VContainer/Scripts/Samples.UnityHelpers.DI.VContainer.asmdef +37 -0
  792. package/Samples~/DI - VContainer/Scripts/Samples.UnityHelpers.DI.VContainer.asmdef.meta +8 -0
  793. package/Samples~/DI - VContainer/Scripts/Spawner.cs +130 -0
  794. package/Samples~/DI - VContainer/Scripts/Spawner.cs.meta +12 -0
  795. package/Samples~/DI - VContainer/Scripts.meta +9 -0
  796. package/Samples~/DI - VContainer.meta +9 -0
  797. package/Samples~/DI - Zenject/Prefabs/RelationalConsumer.prefab +77 -0
  798. package/Samples~/DI - Zenject/Prefabs/RelationalConsumer.prefab.meta +8 -0
  799. package/Samples~/DI - Zenject/Prefabs/SpawnerZenject.prefab +47 -0
  800. package/Samples~/DI - Zenject/Prefabs/SpawnerZenject.prefab.meta +8 -0
  801. package/Samples~/DI - Zenject/Prefabs.meta +9 -0
  802. package/Samples~/DI - Zenject/README.md +553 -0
  803. package/Samples~/DI - Zenject/README.md.meta +7 -0
  804. package/Samples~/DI - Zenject/Scenes/Zenject_Sample.unity +164 -0
  805. package/Samples~/DI - Zenject/Scenes/Zenject_Sample.unity.meta +8 -0
  806. package/Samples~/DI - Zenject/Scenes.meta +9 -0
  807. package/Samples~/DI - Zenject/Scripts/RelationalConsumer.cs +22 -0
  808. package/Samples~/DI - Zenject/Scripts/RelationalConsumer.cs.meta +12 -0
  809. package/Samples~/DI - Zenject/Scripts/RelationalConsumerPool.cs +37 -0
  810. package/Samples~/DI - Zenject/Scripts/RelationalConsumerPool.cs.meta +12 -0
  811. package/Samples~/DI - Zenject/Scripts/Samples.UnityHelpers.DI.Zenject.asmdef +36 -0
  812. package/Samples~/DI - Zenject/Scripts/Samples.UnityHelpers.DI.Zenject.asmdef.meta +8 -0
  813. package/Samples~/DI - Zenject/Scripts/SceneContextPlaceholder.cs +47 -0
  814. package/Samples~/DI - Zenject/Scripts/SceneContextPlaceholder.cs.meta +12 -0
  815. package/Samples~/DI - Zenject/Scripts/SpawnerZenject.cs +91 -0
  816. package/Samples~/DI - Zenject/Scripts/SpawnerZenject.cs.meta +12 -0
  817. package/Samples~/DI - Zenject/Scripts.meta +9 -0
  818. package/Samples~/DI - Zenject.meta +9 -0
  819. package/Samples~/Random - PRNG/README.md +13 -0
  820. package/Samples~/Random - PRNG/README.md.meta +8 -0
  821. package/Samples~/Random - PRNG/Scripts/RandomPrngDemo.cs +28 -0
  822. package/Samples~/Random - PRNG/Scripts/RandomPrngDemo.cs.meta +12 -0
  823. package/Samples~/Random - PRNG/Scripts/Samples.UnityHelpers.Random.Prng.asmdef +17 -0
  824. package/Samples~/Random - PRNG/Scripts/Samples.UnityHelpers.Random.Prng.asmdef.meta +8 -0
  825. package/Samples~/Random - PRNG/Scripts.meta +9 -0
  826. package/Samples~/Random - PRNG.meta +9 -0
  827. package/Samples~/Relational Components - Basic/README.md +21 -0
  828. package/Samples~/Relational Components - Basic/README.md.meta +8 -0
  829. package/Samples~/Relational Components - Basic/Scripts/RelationalBasicConsumer.cs +37 -0
  830. package/Samples~/Relational Components - Basic/Scripts/RelationalBasicConsumer.cs.meta +12 -0
  831. package/Samples~/Relational Components - Basic/Scripts/Samples.UnityHelpers.Relational.Basic.asmdef +17 -0
  832. package/Samples~/Relational Components - Basic/Scripts/Samples.UnityHelpers.Relational.Basic.asmdef.meta +8 -0
  833. package/Samples~/Relational Components - Basic/Scripts.meta +9 -0
  834. package/Samples~/Relational Components - Basic.meta +9 -0
  835. package/Samples~/Serialization - JSON/README.md +14 -0
  836. package/Samples~/Serialization - JSON/README.md.meta +8 -0
  837. package/Samples~/Serialization - JSON/Scripts/JsonSerializationDemo.cs +50 -0
  838. package/Samples~/Serialization - JSON/Scripts/JsonSerializationDemo.cs.meta +12 -0
  839. package/Samples~/Serialization - JSON/Scripts/Samples.UnityHelpers.Serialization.Json.asmdef +17 -0
  840. package/Samples~/Serialization - JSON/Scripts/Samples.UnityHelpers.Serialization.Json.asmdef.meta +8 -0
  841. package/Samples~/Serialization - JSON/Scripts.meta +9 -0
  842. package/Samples~/Serialization - JSON.meta +9 -0
  843. package/Samples~/Spatial Structures - 2D and 3D/README.md +14 -0
  844. package/Samples~/Spatial Structures - 2D and 3D/README.md.meta +8 -0
  845. package/Samples~/Spatial Structures - 2D and 3D/Scripts/Samples.UnityHelpers.SpatialStructures.asmdef +17 -0
  846. package/Samples~/Spatial Structures - 2D and 3D/Scripts/Samples.UnityHelpers.SpatialStructures.asmdef.meta +8 -0
  847. package/Samples~/Spatial Structures - 2D and 3D/Scripts/SpatialStructuresDemo.cs +62 -0
  848. package/Samples~/Spatial Structures - 2D and 3D/Scripts/SpatialStructuresDemo.cs.meta +12 -0
  849. package/Samples~/Spatial Structures - 2D and 3D/Scripts.meta +9 -0
  850. package/Samples~/Spatial Structures - 2D and 3D.meta +9 -0
  851. package/Samples~/UGUI - EnhancedImage/README.md +13 -0
  852. package/Samples~/UGUI - EnhancedImage/README.md.meta +8 -0
  853. package/Samples~/UGUI - EnhancedImage/Scripts/EnhancedImageDemo.cs +36 -0
  854. package/Samples~/UGUI - EnhancedImage/Scripts/EnhancedImageDemo.cs.meta +12 -0
  855. package/Samples~/UGUI - EnhancedImage/Scripts/Samples.UnityHelpers.UGUI.EnhancedImage.asmdef +17 -0
  856. package/Samples~/UGUI - EnhancedImage/Scripts/Samples.UnityHelpers.UGUI.EnhancedImage.asmdef.meta +8 -0
  857. package/Samples~/UGUI - EnhancedImage/Scripts.meta +9 -0
  858. package/Samples~/UGUI - EnhancedImage.meta +9 -0
  859. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/README.md +13 -0
  860. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/README.md.meta +8 -0
  861. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts/Editor/MultiFileSelectorSampleWindow.cs +45 -0
  862. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts/Editor/MultiFileSelectorSampleWindow.cs.meta +12 -0
  863. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts/Editor/Samples.UnityHelpers.UIToolkit.Editor.asmdef +19 -0
  864. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts/Editor/Samples.UnityHelpers.UIToolkit.Editor.asmdef.meta +8 -0
  865. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts/Editor.meta +9 -0
  866. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts.meta +9 -0
  867. package/Samples~/UI Toolkit - MultiFile Selector (Editor).meta +9 -0
  868. package/Shaders/Materials/BackgroundMask-Material.mat +59 -59
  869. package/Shaders/Materials/BackgroundMask-Material.mat.meta +8 -8
  870. package/Shaders/Materials.meta +8 -8
  871. package/Shaders/ShaderGraph/BackgroundMask.shadergraph +1653 -1653
  872. package/Shaders/ShaderGraph/BackgroundMask.shadergraph.meta +10 -10
  873. package/Shaders/ShaderGraph/DebugDisplayValue.shadersubgraph +835 -835
  874. package/Shaders/ShaderGraph/DebugDisplayValue.shadersubgraph.meta +10 -10
  875. package/Shaders/ShaderGraph.meta +8 -8
  876. package/Shaders/Support/EnhancedImageSupport.shader +64 -0
  877. package/Shaders/Support/EnhancedImageSupport.shader.meta +9 -0
  878. package/Shaders/Support.meta +8 -0
  879. package/Shaders.meta +8 -8
  880. package/Styles/Elements/Progress/ArcedProgressBar.cs +345 -345
  881. package/Styles/Elements/Progress/ArcedProgressBar.cs.meta +2 -2
  882. package/Styles/Elements/Progress/CircularProgressBar.cs +307 -307
  883. package/Styles/Elements/Progress/CircularProgressBar.cs.meta +2 -2
  884. package/Styles/Elements/Progress/GlitchProgressBar.cs +416 -416
  885. package/Styles/Elements/Progress/GlitchProgressBar.cs.meta +2 -2
  886. package/Styles/Elements/Progress/LiquidProgressBar.cs +632 -632
  887. package/Styles/Elements/Progress/LiquidProgressBar.cs.meta +2 -2
  888. package/Styles/Elements/Progress/MarchingAntsProgressBar.cs +722 -722
  889. package/Styles/Elements/Progress/MarchingAntsProgressBar.cs.meta +2 -2
  890. package/Styles/Elements/Progress/RegularProgressBar.cs +405 -405
  891. package/Styles/Elements/Progress/RegularProgressBar.cs.meta +2 -2
  892. package/Styles/Elements/Progress/WigglyProgressBar.cs +837 -837
  893. package/Styles/Elements/Progress/WigglyProgressBar.cs.meta +2 -2
  894. package/Styles/Elements/Progress.meta +2 -2
  895. package/Styles/Elements.meta +2 -2
  896. package/Styles/USS/ArcedProgressBar.uss +18 -18
  897. package/Styles/USS/ArcedProgressBar.uss.meta +2 -2
  898. package/Styles/USS/CirclularProgressBar.uss +17 -17
  899. package/Styles/USS/CirclularProgressBar.uss.meta +2 -2
  900. package/Styles/USS/RegularProgressBar.uss +32 -32
  901. package/Styles/USS/RegularProgressBar.uss.meta +2 -2
  902. package/Styles/USS/WigglyProgressBar.uss +16 -16
  903. package/Styles/USS/WigglyProgressBar.uss.meta +2 -2
  904. package/Styles/USS.meta +2 -2
  905. package/Styles/WallstopStudios.UnityHelpers.Styles.asmdef +14 -17
  906. package/Styles/WallstopStudios.UnityHelpers.Styles.asmdef.meta +7 -7
  907. package/Styles.meta +2 -2
  908. package/THIRD_PARTY_NOTICES.md +74 -0
  909. package/THIRD_PARTY_NOTICES.md.meta +7 -0
  910. package/Tests/Editor/Attributes/AnimationEventHelpersTests.cs +171 -0
  911. package/Tests/Editor/Attributes/AnimationEventHelpersTests.cs.meta +11 -0
  912. package/Tests/Editor/Attributes.meta +8 -0
  913. package/Tests/Editor/Core/Attributes/RelationalComponentAssignerTests.cs +118 -0
  914. package/Tests/Editor/Core/Attributes/RelationalComponentAssignerTests.cs.meta +11 -0
  915. package/Tests/Editor/Core/Attributes.meta +8 -0
  916. package/Tests/Editor/Core.meta +8 -0
  917. package/Tests/Editor/Extensions/SerializedPropertyExtensionsTests.cs +194 -0
  918. package/Tests/Editor/Extensions/SerializedPropertyExtensionsTests.cs.meta +3 -0
  919. package/Tests/Editor/Extensions.meta +3 -0
  920. package/Tests/Editor/Helper/DummyScriptableObject.cs +6 -0
  921. package/Tests/Editor/Helper/DummyScriptableObject.cs.meta +3 -0
  922. package/Tests/Editor/Helper/HelpersTests.cs +101 -0
  923. package/Tests/Editor/Helper/HelpersTests.cs.meta +3 -0
  924. package/Tests/Editor/Helper/ObjectHelpersEditorTests.cs +63 -0
  925. package/Tests/Editor/Helper/ObjectHelpersEditorTests.cs.meta +11 -0
  926. package/Tests/Editor/Helper/PromptScope.cs +28 -0
  927. package/Tests/Editor/Helper/PromptScope.cs.meta +11 -0
  928. package/Tests/Editor/Helper/ReflectionHelpersEditorTests.cs +105 -0
  929. package/Tests/Editor/Helper/ReflectionHelpersEditorTests.cs.meta +11 -0
  930. package/Tests/Editor/Helper/SpriteHelpersTests.cs +334 -0
  931. package/Tests/Editor/Helper/SpriteHelpersTests.cs.meta +3 -0
  932. package/Tests/Editor/Helper/SpriteSettingsApplierAdditionalTests.cs +183 -0
  933. package/Tests/Editor/Helper/SpriteSettingsApplierAdditionalTests.cs.meta +11 -0
  934. package/Tests/Editor/Helper/SpriteSettingsApplierTests.cs +161 -0
  935. package/Tests/Editor/Helper/SpriteSettingsApplierTests.cs.meta +11 -0
  936. package/Tests/Editor/Helper.meta +3 -0
  937. package/Tests/Editor/Integrations/VContainer/VContainerIntegrationCompilationTests.cs +40 -0
  938. package/Tests/Editor/Integrations/VContainer/VContainerIntegrationCompilationTests.cs.meta +11 -0
  939. package/Tests/Editor/Integrations/VContainer/VContainerRelationalEntryPointTests.cs +81 -0
  940. package/Tests/Editor/Integrations/VContainer/VContainerRelationalEntryPointTests.cs.meta +11 -0
  941. package/Tests/Editor/Integrations/VContainer/VContainerRelationalHelpersTests.cs +170 -0
  942. package/Tests/Editor/Integrations/VContainer/VContainerRelationalHelpersTests.cs.meta +11 -0
  943. package/Tests/Editor/Integrations/VContainer/WallstopStudios.UnityHelpers.Tests.Editor.VContainer.asmdef +37 -0
  944. package/Tests/Editor/Integrations/VContainer/WallstopStudios.UnityHelpers.Tests.Editor.VContainer.asmdef.meta +7 -0
  945. package/Tests/Editor/Integrations/VContainer.meta +8 -0
  946. package/Tests/Editor/Integrations/Zenject/WallstopStudios.UnityHelpers.Tests.Editor.Zenject.asmdef +37 -0
  947. package/Tests/Editor/Integrations/Zenject/WallstopStudios.UnityHelpers.Tests.Editor.Zenject.asmdef.meta +7 -0
  948. package/Tests/Editor/Integrations/Zenject/ZenjectIntegrationCompilationTests.cs +40 -0
  949. package/Tests/Editor/Integrations/Zenject/ZenjectIntegrationCompilationTests.cs.meta +11 -0
  950. package/Tests/Editor/Integrations/Zenject/ZenjectRelationalHelpersTests.cs +131 -0
  951. package/Tests/Editor/Integrations/Zenject/ZenjectRelationalHelpersTests.cs.meta +11 -0
  952. package/Tests/Editor/Integrations/Zenject/ZenjectRelationalInitializerTests.cs +80 -0
  953. package/Tests/Editor/Integrations/Zenject/ZenjectRelationalInitializerTests.cs.meta +11 -0
  954. package/Tests/Editor/Integrations/Zenject.meta +8 -0
  955. package/Tests/Editor/Integrations.meta +8 -0
  956. package/Tests/Editor/MultiFileSelectorElementTests.cs +265 -0
  957. package/Tests/Editor/MultiFileSelectorElementTests.cs.meta +11 -0
  958. package/Tests/Editor/MultiFileSelectorPersistenceManagerTests.cs +100 -0
  959. package/Tests/Editor/MultiFileSelectorPersistenceManagerTests.cs.meta +11 -0
  960. package/Tests/Editor/PersistentDirectorySettingsTests.cs +59 -0
  961. package/Tests/Editor/PersistentDirectorySettingsTests.cs.meta +11 -0
  962. package/Tests/Editor/PrefabCheckerReportTests.cs +32 -0
  963. package/Tests/Editor/PrefabCheckerReportTests.cs.meta +11 -0
  964. package/Tests/Editor/Sprites/AnimationCopierFilterTests.cs +64 -0
  965. package/Tests/Editor/Sprites/AnimationCopierFilterTests.cs.meta +11 -0
  966. package/Tests/Editor/Sprites/AnimationCopierWindowTests.cs +199 -0
  967. package/Tests/Editor/Sprites/AnimationCopierWindowTests.cs.meta +11 -0
  968. package/Tests/Editor/Sprites/AnimationViewerWindowTests.cs +38 -0
  969. package/Tests/Editor/Sprites/AnimationViewerWindowTests.cs.meta +11 -0
  970. package/Tests/Editor/Sprites/ScriptableSpriteAtlasEditorTests.cs +108 -0
  971. package/Tests/Editor/Sprites/ScriptableSpriteAtlasEditorTests.cs.meta +11 -0
  972. package/Tests/Editor/Sprites/SpriteCropperAdditionalTests.cs +323 -0
  973. package/Tests/Editor/Sprites/SpriteCropperAdditionalTests.cs.meta +11 -0
  974. package/Tests/Editor/Sprites/SpriteCropperTests.cs +162 -0
  975. package/Tests/Editor/Sprites/SpriteCropperTests.cs.meta +11 -0
  976. package/Tests/Editor/Sprites/SpritePivotAdjusterAdditionalTests.cs +227 -0
  977. package/Tests/Editor/Sprites/SpritePivotAdjusterAdditionalTests.cs.meta +11 -0
  978. package/Tests/Editor/Sprites/SpritePivotAdjusterTests.cs +113 -0
  979. package/Tests/Editor/Sprites/SpritePivotAdjusterTests.cs.meta +11 -0
  980. package/Tests/Editor/Sprites/TexturePlatformNameHelperTests.cs +46 -0
  981. package/Tests/Editor/Sprites/TexturePlatformNameHelperTests.cs.meta +11 -0
  982. package/Tests/Editor/Sprites/TextureResizerWizardTests.cs +248 -0
  983. package/Tests/Editor/Sprites/TextureResizerWizardTests.cs.meta +11 -0
  984. package/Tests/Editor/Sprites/TextureSettingsApplierAPITests.cs +180 -0
  985. package/Tests/Editor/Sprites/TextureSettingsApplierAPITests.cs.meta +11 -0
  986. package/Tests/Editor/Sprites/TextureSettingsApplierWizardAdditionalTests.cs +295 -0
  987. package/Tests/Editor/Sprites/TextureSettingsApplierWizardAdditionalTests.cs.meta +11 -0
  988. package/Tests/Editor/Sprites/TextureSettingsApplierWizardTests.cs +134 -0
  989. package/Tests/Editor/Sprites/TextureSettingsApplierWizardTests.cs.meta +11 -0
  990. package/Tests/Editor/Sprites.meta +8 -0
  991. package/Tests/Editor/TestComponents/PrewarmTesterComponent.cs +10 -0
  992. package/Tests/Editor/TestComponents/PrewarmTesterComponent.cs.meta +11 -0
  993. package/Tests/Editor/TestComponents.meta +8 -0
  994. package/Tests/Editor/Tools/ImageBlurToolTests.cs +47 -0
  995. package/Tests/Editor/Tools/ImageBlurToolTests.cs.meta +11 -0
  996. package/Tests/Editor/Tools.meta +8 -0
  997. package/Tests/Editor/Utils/CommonTestBase.cs +250 -0
  998. package/Tests/Editor/Utils/CommonTestBase.cs.meta +11 -0
  999. package/Tests/Editor/Utils/ScriptableObjectSingletonCreatorEditorTests.cs +306 -0
  1000. package/Tests/Editor/Utils/ScriptableObjectSingletonCreatorEditorTests.cs.meta +9 -0
  1001. package/Tests/Editor/Utils/ScriptableObjectSingletonCreatorTests.cs +183 -0
  1002. package/Tests/Editor/Utils/ScriptableObjectSingletonCreatorTests.cs.meta +11 -0
  1003. package/Tests/Editor/Utils/ScriptableObjectSingletonTests.cs +466 -0
  1004. package/Tests/Editor/Utils/ScriptableObjectSingletonTests.cs.meta +11 -0
  1005. package/Tests/Editor/Utils.meta +3 -0
  1006. package/Tests/Editor/WallstopStudios.UnityHelpers.Tests.Editor.asmdef +19 -0
  1007. package/Tests/Editor/WallstopStudios.UnityHelpers.Tests.Editor.asmdef.meta +7 -0
  1008. package/Tests/Editor/Windows/FitTextureSizeWindowTests.cs +773 -0
  1009. package/Tests/Editor/Windows/FitTextureSizeWindowTests.cs.meta +11 -0
  1010. package/Tests/Editor/Windows/PrefabCheckerFolderAdditionTests.cs +96 -0
  1011. package/Tests/Editor/Windows/PrefabCheckerFolderAdditionTests.cs.meta +11 -0
  1012. package/Tests/Editor/Windows/PrefabCheckerTests.cs +81 -0
  1013. package/Tests/Editor/Windows/PrefabCheckerTests.cs.meta +11 -0
  1014. package/Tests/Editor/Windows.meta +8 -0
  1015. package/Tests/Editor.meta +8 -0
  1016. package/Tests/Runtime/AssemblyInfo.cs +4 -0
  1017. package/Tests/Runtime/AssemblyInfo.cs.meta +3 -0
  1018. package/Tests/Runtime/Attributes/ChildComponentTests.cs +766 -81
  1019. package/Tests/Runtime/Attributes/ChildComponentTests.cs.meta +2 -2
  1020. package/Tests/Runtime/Attributes/Components/ExpectChildSpriteRenderers.cs +28 -28
  1021. package/Tests/Runtime/Attributes/Components/ExpectChildSpriteRenderers.cs.meta +2 -2
  1022. package/Tests/Runtime/Attributes/Components/ExpectParentSpriteRenderers.cs +28 -28
  1023. package/Tests/Runtime/Attributes/Components/ExpectParentSpriteRenderers.cs.meta +2 -2
  1024. package/Tests/Runtime/{Components → Attributes/Components}/RelationalComponentTesterComplex.cs +34 -34
  1025. package/Tests/Runtime/{Components → Attributes/Components}/RelationalComponentTesterComplex.cs.meta +2 -2
  1026. package/Tests/Runtime/Attributes/Components/RelationalComponentsTesterSimple.cs +37 -0
  1027. package/Tests/Runtime/{Components → Attributes/Components}/RelationalComponentsTesterSimple.cs.meta +2 -2
  1028. package/Tests/Runtime/Attributes/Components.meta +2 -2
  1029. package/Tests/Runtime/Attributes/MiscRuntimeAttributeTests.cs +75 -0
  1030. package/Tests/Runtime/Attributes/MiscRuntimeAttributeTests.cs.meta +11 -0
  1031. package/Tests/Runtime/Attributes/NotNullAttributeTests.cs +26 -0
  1032. package/Tests/Runtime/Attributes/NotNullAttributeTests.cs.meta +3 -0
  1033. package/Tests/Runtime/Attributes/ParentComponentTests.cs +565 -68
  1034. package/Tests/Runtime/Attributes/ParentComponentTests.cs.meta +2 -2
  1035. package/Tests/Runtime/Attributes/RelationalComponentAdvancedTests.cs +614 -0
  1036. package/Tests/Runtime/Attributes/RelationalComponentAdvancedTests.cs.meta +11 -0
  1037. package/Tests/Runtime/Attributes/RelationalComponentBackwardCompatibilityTests.cs +478 -0
  1038. package/Tests/Runtime/Attributes/RelationalComponentBackwardCompatibilityTests.cs.meta +11 -0
  1039. package/Tests/Runtime/Attributes/RelationalComponentExtensionsTests.cs +56 -0
  1040. package/Tests/Runtime/Attributes/RelationalComponentExtensionsTests.cs.meta +11 -0
  1041. package/Tests/Runtime/Attributes/RelationalComponentHashSetTests.cs +226 -0
  1042. package/Tests/Runtime/Attributes/RelationalComponentHashSetTests.cs.meta +11 -0
  1043. package/Tests/Runtime/Attributes/RelationalComponentInitializerTests.cs +98 -0
  1044. package/Tests/Runtime/Attributes/RelationalComponentInitializerTests.cs.meta +11 -0
  1045. package/Tests/Runtime/Attributes/RelationalComponentTagAndNameFilterEdgeTests.cs +234 -0
  1046. package/Tests/Runtime/Attributes/RelationalComponentTagAndNameFilterEdgeTests.cs.meta +11 -0
  1047. package/Tests/Runtime/Attributes/SiblingComponentTests.cs +721 -0
  1048. package/Tests/Runtime/Attributes/SiblingComponentTests.cs.meta +11 -0
  1049. package/Tests/Runtime/Attributes/ValidateAssignmentAttributeTests.cs +96 -0
  1050. package/Tests/Runtime/Attributes/ValidateAssignmentAttributeTests.cs.meta +11 -0
  1051. package/Tests/Runtime/Attributes.meta +2 -2
  1052. package/Tests/Runtime/Core/Random/RandomComparerTests.cs +166 -0
  1053. package/Tests/Runtime/Core/Random/RandomComparerTests.cs.meta +11 -0
  1054. package/Tests/Runtime/Core/Random.meta +8 -0
  1055. package/Tests/Runtime/Core/Threading/SingleThreadedThreadPoolTests.cs +56 -56
  1056. package/Tests/Runtime/Core/Threading/SingleThreadedThreadPoolTests.cs.meta +2 -2
  1057. package/Tests/Runtime/Core/Threading.meta +2 -2
  1058. package/Tests/Runtime/Core.meta +2 -2
  1059. package/Tests/Runtime/DataStructures/BalancedKDTree2DTests.cs +562 -0
  1060. package/Tests/Runtime/DataStructures/{BalancedKDTreeTests.cs.meta → BalancedKDTree2DTests.cs.meta} +11 -11
  1061. package/Tests/Runtime/DataStructures/BalancedKDTree3DTests.cs +10 -0
  1062. package/Tests/Runtime/DataStructures/BalancedKDTree3DTests.cs.meta +11 -0
  1063. package/Tests/Runtime/DataStructures/BitSetTests.cs +1400 -0
  1064. package/Tests/Runtime/DataStructures/BitSetTests.cs.meta +3 -0
  1065. package/Tests/Runtime/DataStructures/BoundingBox3DTests.cs +1215 -0
  1066. package/Tests/Runtime/DataStructures/BoundingBox3DTests.cs.meta +11 -0
  1067. package/Tests/Runtime/DataStructures/CircleTests.cs +965 -0
  1068. package/Tests/Runtime/DataStructures/CircleTests.cs.meta +11 -0
  1069. package/Tests/Runtime/DataStructures/CyclicBufferTests.cs +2083 -324
  1070. package/Tests/Runtime/DataStructures/CyclicBufferTests.cs.meta +2 -2
  1071. package/Tests/Runtime/DataStructures/DequeTests.cs +790 -0
  1072. package/Tests/Runtime/DataStructures/DequeTests.cs.meta +3 -0
  1073. package/Tests/Runtime/DataStructures/DisjointSetTests.cs +1114 -0
  1074. package/Tests/Runtime/DataStructures/DisjointSetTests.cs.meta +3 -0
  1075. package/Tests/Runtime/DataStructures/FastOneOfTests.cs +966 -0
  1076. package/Tests/Runtime/DataStructures/FastOneOfTests.cs.meta +11 -0
  1077. package/Tests/Runtime/DataStructures/FastVector2IntTests.cs +286 -0
  1078. package/Tests/Runtime/DataStructures/FastVector2IntTests.cs.meta +11 -0
  1079. package/Tests/Runtime/DataStructures/FastVector3IntTests.cs +414 -0
  1080. package/Tests/Runtime/DataStructures/FastVector3IntTests.cs.meta +11 -0
  1081. package/Tests/Runtime/DataStructures/HeapTests.cs +1953 -0
  1082. package/Tests/Runtime/DataStructures/HeapTests.cs.meta +11 -0
  1083. package/Tests/Runtime/DataStructures/ImmutableBitSetTests.cs +833 -0
  1084. package/Tests/Runtime/DataStructures/ImmutableBitSetTests.cs.meta +3 -0
  1085. package/Tests/Runtime/DataStructures/KDTree3DTestsBase.cs +297 -0
  1086. package/Tests/Runtime/DataStructures/KDTree3DTestsBase.cs.meta +11 -0
  1087. package/Tests/Runtime/DataStructures/OctTree3DTests.cs +351 -0
  1088. package/Tests/Runtime/DataStructures/OctTree3DTests.cs.meta +11 -0
  1089. package/Tests/Runtime/DataStructures/PriorityQueueTests.cs +71 -0
  1090. package/Tests/Runtime/DataStructures/PriorityQueueTests.cs.meta +3 -0
  1091. package/Tests/Runtime/DataStructures/ProtobufSerializationTests.cs +475 -0
  1092. package/Tests/Runtime/DataStructures/ProtobufSerializationTests.cs.meta +11 -0
  1093. package/Tests/Runtime/DataStructures/QuadTree2DTests.cs +660 -0
  1094. package/Tests/Runtime/DataStructures/QuadTree2DTests.cs.meta +11 -0
  1095. package/Tests/Runtime/DataStructures/RTree2DTests.cs +823 -0
  1096. package/Tests/Runtime/DataStructures/RTree2DTests.cs.meta +3 -0
  1097. package/Tests/Runtime/DataStructures/RTree3DTests.cs +270 -0
  1098. package/Tests/Runtime/DataStructures/RTree3DTests.cs.meta +11 -0
  1099. package/Tests/Runtime/DataStructures/SparseSetTests.cs +1146 -0
  1100. package/Tests/Runtime/DataStructures/SparseSetTests.cs.meta +3 -0
  1101. package/Tests/Runtime/DataStructures/SpatialHashTests.cs +992 -0
  1102. package/Tests/Runtime/DataStructures/SpatialHashTests.cs.meta +11 -0
  1103. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsConsistencyTests.cs +351 -0
  1104. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsConsistencyTests.cs.meta +11 -0
  1105. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsEdgeTests.cs +127 -0
  1106. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsEdgeTests.cs.meta +11 -0
  1107. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsFuzzTests.cs +218 -0
  1108. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsFuzzTests.cs.meta +11 -0
  1109. package/Tests/Runtime/DataStructures/SpatialTree2DTests.cs +396 -0
  1110. package/Tests/Runtime/DataStructures/SpatialTree2DTests.cs.meta +11 -0
  1111. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsConsistencyTests.cs +281 -0
  1112. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsConsistencyTests.cs.meta +11 -0
  1113. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsEdgeTests.cs +127 -0
  1114. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsEdgeTests.cs.meta +11 -0
  1115. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsFuzzTests.cs +170 -0
  1116. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsFuzzTests.cs.meta +11 -0
  1117. package/Tests/Runtime/DataStructures/SpatialTree3DTests.cs +474 -0
  1118. package/Tests/Runtime/DataStructures/SpatialTree3DTests.cs.meta +11 -0
  1119. package/Tests/Runtime/DataStructures/SphereTests.cs +806 -0
  1120. package/Tests/Runtime/DataStructures/SphereTests.cs.meta +3 -0
  1121. package/Tests/Runtime/DataStructures/StringWrapperTests.cs +333 -0
  1122. package/Tests/Runtime/DataStructures/StringWrapperTests.cs.meta +11 -0
  1123. package/Tests/Runtime/DataStructures/TimedCacheTests.cs +669 -0
  1124. package/Tests/Runtime/DataStructures/TimedCacheTests.cs.meta +11 -0
  1125. package/Tests/Runtime/DataStructures/TrieTests.cs +3385 -0
  1126. package/Tests/Runtime/DataStructures/TrieTests.cs.meta +11 -0
  1127. package/Tests/Runtime/DataStructures/UnbalancedKDTree2DTests.cs +565 -0
  1128. package/Tests/Runtime/DataStructures/{UnbalancedKDTreeTests.cs.meta → UnbalancedKDTree2DTests.cs.meta} +11 -11
  1129. package/Tests/Runtime/DataStructures/UnbalancedKDTree3DTests.cs +10 -0
  1130. package/Tests/Runtime/DataStructures/UnbalancedKDTree3DTests.cs.meta +11 -0
  1131. package/Tests/Runtime/DataStructures.meta +8 -8
  1132. package/Tests/Runtime/Extensions/AnimatorExtensionsTests.cs +28 -0
  1133. package/Tests/Runtime/Extensions/AnimatorExtensionsTests.cs.meta +11 -0
  1134. package/Tests/Runtime/Extensions/AsyncOperationExtensionsTests.cs +667 -0
  1135. package/Tests/Runtime/Extensions/AsyncOperationExtensionsTests.cs.meta +11 -0
  1136. package/Tests/Runtime/Extensions/CircleExtensionsTests.cs +230 -0
  1137. package/Tests/Runtime/Extensions/CircleExtensionsTests.cs.meta +11 -0
  1138. package/Tests/Runtime/Extensions/ColorExtensionsTests.cs +55 -0
  1139. package/Tests/Runtime/Extensions/ColorExtensionsTests.cs.meta +11 -0
  1140. package/Tests/Runtime/Extensions/DictionaryExtensionTests.cs +724 -438
  1141. package/Tests/Runtime/Extensions/DictionaryExtensionTests.cs.meta +2 -2
  1142. package/Tests/Runtime/Extensions/DirectionExtensionsComprehensiveTests.cs +403 -0
  1143. package/Tests/Runtime/Extensions/DirectionExtensionsComprehensiveTests.cs.meta +11 -0
  1144. package/Tests/Runtime/Extensions/DirectionExtensionsTests.cs +69 -0
  1145. package/Tests/Runtime/Extensions/DirectionExtensionsTests.cs.meta +11 -0
  1146. package/Tests/Runtime/Extensions/EnumExtensionTests.cs +809 -153
  1147. package/Tests/Runtime/Extensions/EnumExtensionTests.cs.meta +2 -2
  1148. package/Tests/Runtime/Extensions/IEnumerableExtensionsTests.cs +191 -0
  1149. package/Tests/Runtime/Extensions/IEnumerableExtensionsTests.cs.meta +11 -0
  1150. package/Tests/Runtime/Extensions/IListExtensionTests.cs +955 -169
  1151. package/Tests/Runtime/Extensions/IListExtensionTests.cs.meta +2 -2
  1152. package/Tests/Runtime/Extensions/IReadonlyListExtensionTests.cs +266 -58
  1153. package/Tests/Runtime/Extensions/IReadonlyListExtensionTests.cs.meta +2 -2
  1154. package/Tests/Runtime/Extensions/LoggingExtensionTests.cs +721 -718
  1155. package/Tests/Runtime/Extensions/LoggingExtensionTests.cs.meta +2 -2
  1156. package/Tests/Runtime/Extensions/ProtoEqualityExtensionsTests.cs +565 -0
  1157. package/Tests/Runtime/Extensions/ProtoEqualityExtensionsTests.cs.meta +3 -0
  1158. package/Tests/Runtime/Extensions/ProtoEqualityPolymorphismTests.cs +100 -0
  1159. package/Tests/Runtime/Extensions/ProtoEqualityPolymorphismTests.cs.meta +11 -0
  1160. package/Tests/Runtime/Extensions/RandomExtensionTests.cs +719 -27
  1161. package/Tests/Runtime/Extensions/RandomExtensionTests.cs.meta +2 -2
  1162. package/Tests/Runtime/Extensions/StringExtensionTests.cs +2592 -31
  1163. package/Tests/Runtime/Extensions/StringExtensionTests.cs.meta +2 -2
  1164. package/Tests/Runtime/Extensions/UnityExtensionsBasicTests.cs +166 -0
  1165. package/Tests/Runtime/Extensions/UnityExtensionsBasicTests.cs.meta +11 -0
  1166. package/Tests/Runtime/Extensions/UnityExtensionsComprehensiveTests.cs +1446 -0
  1167. package/Tests/Runtime/Extensions/UnityExtensionsComprehensiveTests.cs.meta +11 -0
  1168. package/Tests/Runtime/Extensions/UnityExtensionsMathTests.cs +1779 -0
  1169. package/Tests/Runtime/Extensions/UnityExtensionsMathTests.cs.meta +11 -0
  1170. package/Tests/Runtime/Extensions/UnityExtensionsVector2HullTests.cs +292 -0
  1171. package/Tests/Runtime/Extensions/UnityExtensionsVector2HullTests.cs.meta +11 -0
  1172. package/Tests/Runtime/Extensions/UnityLogTagFormatterEdgeTests.cs +260 -0
  1173. package/Tests/Runtime/Extensions/UnityLogTagFormatterEdgeTests.cs.meta +11 -0
  1174. package/Tests/Runtime/Extensions.meta +2 -2
  1175. package/Tests/Runtime/Helper/ArrayConverterTests.cs +19 -19
  1176. package/Tests/Runtime/Helper/ArrayConverterTests.cs.meta +2 -2
  1177. package/Tests/Runtime/Helper/AssignUtilitiesTests.cs +38 -0
  1178. package/Tests/Runtime/Helper/AssignUtilitiesTests.cs.meta +11 -0
  1179. package/Tests/Runtime/Helper/DirectoryHelperTests.cs +347 -0
  1180. package/Tests/Runtime/Helper/DirectoryHelperTests.cs.meta +11 -0
  1181. package/Tests/Runtime/Helper/EnumerablesTests.cs +45 -0
  1182. package/Tests/Runtime/Helper/EnumerablesTests.cs.meta +11 -0
  1183. package/Tests/Runtime/Helper/FileHelperTests.cs +481 -0
  1184. package/Tests/Runtime/Helper/FileHelperTests.cs.meta +11 -0
  1185. package/Tests/Runtime/Helper/FormattingHelpersTests.cs +353 -0
  1186. package/Tests/Runtime/Helper/FormattingHelpersTests.cs.meta +11 -0
  1187. package/Tests/Runtime/Helper/FuncBasedComparerTests.cs +27 -0
  1188. package/Tests/Runtime/Helper/FuncBasedComparerTests.cs.meta +11 -0
  1189. package/Tests/Runtime/Helper/GeometryTests.cs +517 -0
  1190. package/Tests/Runtime/Helper/GeometryTests.cs.meta +3 -0
  1191. package/Tests/Runtime/Helper/HelpersTests.cs +749 -0
  1192. package/Tests/Runtime/Helper/HelpersTests.cs.meta +11 -0
  1193. package/Tests/Runtime/Helper/IterationHelpersTests.cs +173 -0
  1194. package/Tests/Runtime/Helper/IterationHelpersTests.cs.meta +11 -0
  1195. package/Tests/Runtime/Helper/LineHelperTests.cs +662 -0
  1196. package/Tests/Runtime/Helper/LineHelperTests.cs.meta +11 -0
  1197. package/Tests/Runtime/Helper/ObjectHelperTests.cs +444 -432
  1198. package/Tests/Runtime/Helper/ObjectHelperTests.cs.meta +2 -2
  1199. package/Tests/Runtime/Helper/ObjectsTests.cs +363 -0
  1200. package/Tests/Runtime/Helper/ObjectsTests.cs.meta +3 -0
  1201. package/Tests/Runtime/Helper/PathHelperTests.cs +183 -0
  1202. package/Tests/Runtime/Helper/PathHelperTests.cs.meta +11 -0
  1203. package/Tests/Runtime/Helper/ReflectionHelperTests.cs +2199 -1493
  1204. package/Tests/Runtime/Helper/ReflectionHelperTests.cs.meta +2 -2
  1205. package/Tests/Runtime/Helper/ReflectionHelpersMemberLookupTests.cs +192 -0
  1206. package/Tests/Runtime/Helper/ReflectionHelpersMemberLookupTests.cs.meta +11 -0
  1207. package/Tests/Runtime/Helper/ReflectionHelpersTypeScanningTests.cs +58 -0
  1208. package/Tests/Runtime/Helper/ReflectionHelpersTypeScanningTests.cs.meta +11 -0
  1209. package/Tests/Runtime/Helper/SceneHelperTests.cs +77 -94
  1210. package/Tests/Runtime/Helper/SceneHelperTests.cs.meta +2 -2
  1211. package/Tests/Runtime/Helper/UnityMainThreadDispatcherTests.cs +45 -0
  1212. package/Tests/Runtime/Helper/UnityMainThreadDispatcherTests.cs.meta +11 -0
  1213. package/Tests/Runtime/Helper/WallMathTests.cs +1884 -233
  1214. package/Tests/Runtime/Helper/WallMathTests.cs.meta +2 -2
  1215. package/Tests/Runtime/Helper.meta +2 -2
  1216. package/Tests/Runtime/Integrations/VContainer/RelationalComponentsVContainerTests.cs +601 -0
  1217. package/Tests/Runtime/Integrations/VContainer/RelationalComponentsVContainerTests.cs.meta +11 -0
  1218. package/Tests/Runtime/Integrations/VContainer/RelationalObjectPoolsVContainerTests.cs +86 -0
  1219. package/Tests/Runtime/Integrations/VContainer/RelationalObjectPoolsVContainerTests.cs.meta +11 -0
  1220. package/Tests/Runtime/Integrations/VContainer/WallstopStudios.UnityHelpers.Tests.Runtime.VContainer.asmdef +38 -0
  1221. package/Tests/Runtime/Integrations/VContainer/WallstopStudios.UnityHelpers.Tests.Runtime.VContainer.asmdef.meta +7 -0
  1222. package/Tests/Runtime/Integrations/VContainer.meta +8 -0
  1223. package/Tests/Runtime/Integrations/Zenject/RelationalComponentsZenjectTests.cs +619 -0
  1224. package/Tests/Runtime/Integrations/Zenject/RelationalComponentsZenjectTests.cs.meta +11 -0
  1225. package/Tests/Runtime/Integrations/Zenject/WallstopStudios.UnityHelpers.Tests.Runtime.Zenject.asmdef +38 -0
  1226. package/Tests/Runtime/Integrations/Zenject/WallstopStudios.UnityHelpers.Tests.Runtime.Zenject.asmdef.meta +7 -0
  1227. package/Tests/Runtime/Integrations/Zenject.meta +8 -0
  1228. package/Tests/Runtime/Integrations.meta +8 -0
  1229. package/Tests/Runtime/Math/Line2DTests.cs +594 -0
  1230. package/Tests/Runtime/Math/Line2DTests.cs.meta +11 -0
  1231. package/Tests/Runtime/Math/Line3DTests.cs +655 -0
  1232. package/Tests/Runtime/Math/Line3DTests.cs.meta +11 -0
  1233. package/Tests/Runtime/Math/LineTests.cs +480 -0
  1234. package/Tests/Runtime/Math/LineTests.cs.meta +11 -0
  1235. package/Tests/Runtime/Math/ParabolaTests.cs +477 -0
  1236. package/Tests/Runtime/Math/ParabolaTests.cs.meta +11 -0
  1237. package/Tests/Runtime/Math/PointPolygonCheckTests.cs +939 -0
  1238. package/Tests/Runtime/Math/PointPolygonCheckTests.cs.meta +11 -0
  1239. package/Tests/Runtime/Math/RangeTests.cs +197 -0
  1240. package/Tests/Runtime/Math/RangeTests.cs.meta +11 -0
  1241. package/Tests/Runtime/Math.meta +8 -0
  1242. package/Tests/Runtime/Performance/BenchmarkReadmeUpdater.cs +81 -0
  1243. package/Tests/Runtime/Performance/BenchmarkReadmeUpdater.cs.meta +11 -0
  1244. package/Tests/Runtime/Performance/JsonSerializationPerformanceTests.cs +421 -0
  1245. package/Tests/Runtime/Performance/JsonSerializationPerformanceTests.cs.meta +3 -0
  1246. package/Tests/Runtime/Performance/ListExtensionPerformanceTests.cs +76 -76
  1247. package/Tests/Runtime/Performance/ListExtensionPerformanceTests.cs.meta +2 -2
  1248. package/Tests/Runtime/Performance/ProtoEqualsPerformanceTests.cs +161 -0
  1249. package/Tests/Runtime/Performance/ProtoEqualsPerformanceTests.cs.meta +11 -0
  1250. package/Tests/Runtime/Performance/ProtoSerializationPerformanceTests.cs +207 -0
  1251. package/Tests/Runtime/Performance/ProtoSerializationPerformanceTests.cs.meta +3 -0
  1252. package/Tests/Runtime/Performance/RandomPerformanceTests.cs +195 -181
  1253. package/Tests/Runtime/Performance/RandomPerformanceTests.cs.meta +11 -11
  1254. package/Tests/Runtime/Performance/RelationComponentPerformanceTests.cs +60 -61
  1255. package/Tests/Runtime/Performance/RelationComponentPerformanceTests.cs.meta +2 -2
  1256. package/Tests/Runtime/Performance/SpatialTree2DPerformanceTests.cs +697 -0
  1257. package/Tests/Runtime/Performance/SpatialTree2DPerformanceTests.cs.meta +11 -0
  1258. package/Tests/Runtime/Performance/SpatialTree3DPerformanceTests.cs +653 -0
  1259. package/Tests/Runtime/Performance/SpatialTree3DPerformanceTests.cs.meta +11 -0
  1260. package/Tests/Runtime/Performance.meta +8 -8
  1261. package/Tests/Runtime/Random/DotNetRandomTests.cs +9 -9
  1262. package/Tests/Runtime/Random/DotNetRandomTests.cs.meta +2 -2
  1263. package/Tests/Runtime/Random/IllusionFlowTests.cs +12 -12
  1264. package/Tests/Runtime/Random/IllusionFlowTests.cs.meta +2 -2
  1265. package/Tests/Runtime/Random/LinearCongruentialGeneratorTests.cs +12 -12
  1266. package/Tests/Runtime/Random/LinearCongruentialGeneratorTests.cs.meta +2 -2
  1267. package/Tests/Runtime/Random/PcgRandomTests.cs +9 -9
  1268. package/Tests/Runtime/Random/PcgRandomTests.cs.meta +11 -11
  1269. package/Tests/Runtime/Random/RandomProtoSerializationTests.cs +494 -0
  1270. package/Tests/Runtime/Random/RandomProtoSerializationTests.cs.meta +3 -0
  1271. package/Tests/Runtime/Random/RandomStateSerializationTests.cs +304 -0
  1272. package/Tests/Runtime/Random/RandomStateSerializationTests.cs.meta +4 -0
  1273. package/Tests/Runtime/Random/RandomTestBase.cs +836 -787
  1274. package/Tests/Runtime/Random/RandomTestBase.cs.meta +11 -11
  1275. package/Tests/Runtime/Random/RomuDuoRandomTests.cs +9 -9
  1276. package/Tests/Runtime/Random/RomuDuoRandomTests.cs.meta +2 -2
  1277. package/Tests/Runtime/Random/SplitMix64RandomTests.cs +9 -9
  1278. package/Tests/Runtime/Random/SplitMix64RandomTests.cs.meta +2 -2
  1279. package/Tests/Runtime/Random/SquirrelRandomTests.cs +14 -14
  1280. package/Tests/Runtime/Random/SquirrelRandomTests.cs.meta +11 -11
  1281. package/Tests/Runtime/Random/SystemRandomTests.cs +10 -10
  1282. package/Tests/Runtime/Random/SystemRandomTests.cs.meta +11 -11
  1283. package/Tests/Runtime/Random/UnityRandomTests.cs +9 -9
  1284. package/Tests/Runtime/Random/UnityRandomTests.cs.meta +11 -11
  1285. package/Tests/Runtime/Random/WyRandomTests.cs +9 -9
  1286. package/Tests/Runtime/Random/WyRandomTests.cs.meta +2 -2
  1287. package/Tests/Runtime/Random/XorShiftRandomTests.cs +9 -9
  1288. package/Tests/Runtime/Random/XorShiftRandomTests.cs.meta +11 -11
  1289. package/Tests/Runtime/Random/XoroShiroRandomTests.cs +9 -9
  1290. package/Tests/Runtime/Random/XoroShiroRandomTests.cs.meta +2 -2
  1291. package/Tests/Runtime/Random.meta +8 -8
  1292. package/Tests/Runtime/RuntimeTestTimeouts.cs +3 -0
  1293. package/Tests/Runtime/RuntimeTestTimeouts.cs.meta +11 -0
  1294. package/Tests/Runtime/Scenes/Test1.unity +723 -723
  1295. package/Tests/Runtime/Scenes/Test1.unity.meta +7 -7
  1296. package/Tests/Runtime/Scenes/Test2.unity +723 -723
  1297. package/Tests/Runtime/Scenes/Test2.unity.meta +7 -7
  1298. package/Tests/Runtime/Scenes.meta +2 -2
  1299. package/Tests/Runtime/Serialization/AdaptersJsonTests.cs +67 -0
  1300. package/Tests/Runtime/Serialization/AdaptersJsonTests.cs.meta +11 -0
  1301. package/Tests/Runtime/Serialization/BitSetJsonTests.cs +50 -0
  1302. package/Tests/Runtime/Serialization/BitSetJsonTests.cs.meta +11 -0
  1303. package/Tests/Runtime/Serialization/CyclicBufferJsonTests.cs +67 -0
  1304. package/Tests/Runtime/Serialization/CyclicBufferJsonTests.cs.meta +11 -0
  1305. package/Tests/Runtime/Serialization/DequeJsonTests.cs +70 -0
  1306. package/Tests/Runtime/Serialization/DequeJsonTests.cs.meta +11 -0
  1307. package/Tests/Runtime/Serialization/ImmutableBitSetJsonTests.cs +25 -0
  1308. package/Tests/Runtime/Serialization/ImmutableBitSetJsonTests.cs.meta +11 -0
  1309. package/Tests/Runtime/Serialization/JsonConverterAdditionalTests.cs +30 -0
  1310. package/Tests/Runtime/Serialization/JsonConverterAdditionalTests.cs.meta +11 -0
  1311. package/Tests/Runtime/Serialization/JsonConverterTests.cs +1153 -0
  1312. package/Tests/Runtime/Serialization/JsonConverterTests.cs.meta +11 -0
  1313. package/Tests/Runtime/Serialization/JsonRoundtripComprehensiveTests.cs +239 -0
  1314. package/Tests/Runtime/Serialization/JsonRoundtripComprehensiveTests.cs.meta +11 -0
  1315. package/Tests/Runtime/Serialization/JsonSerializationCorrectnessTests.cs +458 -0
  1316. package/Tests/Runtime/Serialization/JsonSerializationCorrectnessTests.cs.meta +3 -0
  1317. package/Tests/Runtime/Serialization/JsonSerializationTest.cs +167 -156
  1318. package/Tests/Runtime/Serialization/JsonSerializationTest.cs.meta +2 -2
  1319. package/Tests/Runtime/Serialization/MathJsonTests.cs +79 -0
  1320. package/Tests/Runtime/Serialization/MathJsonTests.cs.meta +11 -0
  1321. package/Tests/Runtime/Serialization/ProtoInterfaceResolutionEdgeTests.cs +76 -0
  1322. package/Tests/Runtime/Serialization/ProtoInterfaceResolutionEdgeTests.cs.meta +11 -0
  1323. package/Tests/Runtime/Serialization/ProtoRootRegistrationTests.cs +80 -0
  1324. package/Tests/Runtime/Serialization/ProtoRootRegistrationTests.cs.meta +11 -0
  1325. package/Tests/Runtime/Serialization/ProtoRoundtripComprehensiveTests.cs +257 -0
  1326. package/Tests/Runtime/Serialization/ProtoRoundtripComprehensiveTests.cs.meta +11 -0
  1327. package/Tests/Runtime/Serialization/ProtoSerializationCorrectnessTests.cs +471 -0
  1328. package/Tests/Runtime/Serialization/ProtoSerializationCorrectnessTests.cs.meta +3 -0
  1329. package/Tests/Runtime/Serialization/ProtoSerializationTests.cs +169 -0
  1330. package/Tests/Runtime/Serialization/ProtoSerializationTests.cs.meta +11 -0
  1331. package/Tests/Runtime/Serialization/ProtoSerializeBehaviorTests.cs +62 -0
  1332. package/Tests/Runtime/Serialization/ProtoSerializeBehaviorTests.cs.meta +11 -0
  1333. package/Tests/Runtime/Serialization/SerializerAdditionalTests.cs +907 -0
  1334. package/Tests/Runtime/Serialization/SerializerAdditionalTests.cs.meta +3 -0
  1335. package/Tests/Runtime/Serialization/SerializerFileIoTests.cs +105 -0
  1336. package/Tests/Runtime/Serialization/SerializerFileIoTests.cs.meta +11 -0
  1337. package/Tests/Runtime/Serialization/TypeConverterTests.cs +34 -0
  1338. package/Tests/Runtime/Serialization/TypeConverterTests.cs.meta +11 -0
  1339. package/Tests/Runtime/Serialization/UnityEngineObjectJsonTests.cs +247 -0
  1340. package/Tests/Runtime/Serialization/UnityEngineObjectJsonTests.cs.meta +11 -0
  1341. package/Tests/Runtime/Serialization.meta +2 -2
  1342. package/Tests/Runtime/Tags/AttributeComponentTests.cs +174 -0
  1343. package/Tests/Runtime/Tags/AttributeComponentTests.cs.meta +3 -0
  1344. package/Tests/Runtime/Tags/AttributeDataTests.cs +312 -0
  1345. package/Tests/Runtime/Tags/AttributeDataTests.cs.meta +11 -0
  1346. package/Tests/Runtime/Tags/AttributeUtilitiesTests.cs +405 -0
  1347. package/Tests/Runtime/Tags/AttributeUtilitiesTests.cs.meta +3 -0
  1348. package/Tests/Runtime/Tags/CosmeticAndCollisionTests.cs +147 -0
  1349. package/Tests/Runtime/Tags/CosmeticAndCollisionTests.cs.meta +11 -0
  1350. package/Tests/Runtime/Tags/CosmeticEffectDataTests.cs +60 -0
  1351. package/Tests/Runtime/Tags/CosmeticEffectDataTests.cs.meta +3 -0
  1352. package/Tests/Runtime/Tags/EffectHandleTests.cs +61 -0
  1353. package/Tests/Runtime/Tags/EffectHandleTests.cs.meta +3 -0
  1354. package/Tests/Runtime/Tags/EffectHandlerTests.cs +270 -0
  1355. package/Tests/Runtime/Tags/EffectHandlerTests.cs.meta +3 -0
  1356. package/Tests/Runtime/Tags/Helpers/RecordingCosmeticComponent.cs +39 -0
  1357. package/Tests/Runtime/Tags/Helpers/RecordingCosmeticComponent.cs.meta +3 -0
  1358. package/Tests/Runtime/Tags/Helpers/TagTestBase.cs +49 -0
  1359. package/Tests/Runtime/Tags/Helpers/TagTestBase.cs.meta +3 -0
  1360. package/Tests/Runtime/Tags/Helpers/TestAttributesComponent.cs +28 -0
  1361. package/Tests/Runtime/Tags/Helpers/TestAttributesComponent.cs.meta +3 -0
  1362. package/Tests/Runtime/Tags/Helpers.meta +3 -0
  1363. package/Tests/Runtime/Tags/TagHandlerTests.cs +108 -0
  1364. package/Tests/Runtime/Tags/TagHandlerTests.cs.meta +3 -0
  1365. package/Tests/Runtime/Tags.meta +8 -0
  1366. package/Tests/Runtime/TestUtils/CommonTestBase.cs +301 -0
  1367. package/Tests/Runtime/TestUtils/CommonTestBase.cs.meta +11 -0
  1368. package/Tests/Runtime/TestUtils/GCAssert.cs +55 -0
  1369. package/Tests/Runtime/TestUtils/GCAssert.cs.meta +11 -0
  1370. package/Tests/Runtime/TestUtils/SpatialAssert.cs +33 -0
  1371. package/Tests/Runtime/TestUtils/SpatialAssert.cs.meta +11 -0
  1372. package/Tests/Runtime/TestUtils/SpatialDiagnostics.cs +195 -0
  1373. package/Tests/Runtime/TestUtils/SpatialDiagnostics.cs.meta +11 -0
  1374. package/Tests/Runtime/TestUtils.meta +8 -0
  1375. package/Tests/Runtime/Utils/AnimationEventEqualityComparerTests.cs +144 -0
  1376. package/Tests/Runtime/Utils/AnimationEventEqualityComparerTests.cs.meta +11 -0
  1377. package/Tests/Runtime/Utils/Ascii85Tests.cs +56 -0
  1378. package/Tests/Runtime/Utils/Ascii85Tests.cs.meta +11 -0
  1379. package/Tests/Runtime/Utils/BuffersTests.cs +1148 -741
  1380. package/Tests/Runtime/Utils/BuffersTests.cs.meta +2 -2
  1381. package/Tests/Runtime/Utils/BuffersWaitInstructionTests.cs +31 -0
  1382. package/Tests/Runtime/Utils/BuffersWaitInstructionTests.cs.meta +11 -0
  1383. package/Tests/Runtime/Utils/CenterPointOffsetTests.cs +67 -0
  1384. package/Tests/Runtime/Utils/CenterPointOffsetTests.cs.meta +11 -0
  1385. package/Tests/Runtime/Utils/ChildSpawnerTests.cs +490 -0
  1386. package/Tests/Runtime/Utils/ChildSpawnerTests.cs.meta +11 -0
  1387. package/Tests/Runtime/Utils/CircleLineRendererTests.cs +80 -0
  1388. package/Tests/Runtime/Utils/CircleLineRendererTests.cs.meta +11 -0
  1389. package/Tests/Runtime/Utils/CollisionProxyTests.cs +442 -0
  1390. package/Tests/Runtime/Utils/CollisionProxyTests.cs.meta +11 -0
  1391. package/Tests/Runtime/Utils/CoroutineHandlerTests.cs +353 -0
  1392. package/Tests/Runtime/Utils/CoroutineHandlerTests.cs.meta +11 -0
  1393. package/Tests/Runtime/Utils/DeferredDisposalResultTests.cs +44 -0
  1394. package/Tests/Runtime/Utils/DeferredDisposalResultTests.cs.meta +11 -0
  1395. package/Tests/Runtime/Utils/LZMAComprehensiveTests.cs +249 -0
  1396. package/Tests/Runtime/Utils/LZMAComprehensiveTests.cs.meta +11 -0
  1397. package/Tests/Runtime/Utils/LZMATests.cs +31 -0
  1398. package/Tests/Runtime/Utils/LZMATests.cs.meta +11 -0
  1399. package/Tests/Runtime/Utils/MatchColliderToSpriteAdditionalTests.cs +86 -0
  1400. package/Tests/Runtime/Utils/MatchColliderToSpriteAdditionalTests.cs.meta +11 -0
  1401. package/Tests/Runtime/Utils/MatchColliderToSpriteTests.cs +503 -0
  1402. package/Tests/Runtime/Utils/MatchColliderToSpriteTests.cs.meta +11 -0
  1403. package/Tests/Runtime/Utils/MatchTransformEdgeTests.cs +34 -0
  1404. package/Tests/Runtime/Utils/MatchTransformEdgeTests.cs.meta +11 -0
  1405. package/Tests/Runtime/Utils/MatchTransformTests.cs +495 -0
  1406. package/Tests/Runtime/Utils/MatchTransformTests.cs.meta +11 -0
  1407. package/Tests/Runtime/Utils/OscillatorTests.cs +540 -0
  1408. package/Tests/Runtime/Utils/OscillatorTests.cs.meta +11 -0
  1409. package/Tests/Runtime/Utils/PolygonCollider2DOptimizerTests.cs +52 -0
  1410. package/Tests/Runtime/Utils/PolygonCollider2DOptimizerTests.cs.meta +11 -0
  1411. package/Tests/Runtime/Utils/RuntimeSingletonTests.cs +766 -0
  1412. package/Tests/Runtime/Utils/RuntimeSingletonTests.cs.meta +11 -0
  1413. package/Tests/Runtime/Utils/SerializedStringComparerEdgeTests.cs +47 -0
  1414. package/Tests/Runtime/Utils/SerializedStringComparerEdgeTests.cs.meta +11 -0
  1415. package/Tests/Runtime/Utils/SerializedStringComparerTests.cs +361 -0
  1416. package/Tests/Runtime/Utils/SerializedStringComparerTests.cs.meta +11 -0
  1417. package/Tests/Runtime/Utils/SpriteRendererMetadataTests.cs +383 -398
  1418. package/Tests/Runtime/Utils/SpriteRendererMetadataTests.cs.meta +2 -2
  1419. package/Tests/Runtime/Utils/SpriteRendererSyncTests.cs +134 -0
  1420. package/Tests/Runtime/Utils/SpriteRendererSyncTests.cs.meta +11 -0
  1421. package/Tests/Runtime/Utils/StartTrackerTests.cs +24 -0
  1422. package/Tests/Runtime/Utils/StartTrackerTests.cs.meta +11 -0
  1423. package/Tests/Runtime/Utils/TextureScaleEdgeTests.cs +114 -0
  1424. package/Tests/Runtime/Utils/TextureScaleEdgeTests.cs.meta +11 -0
  1425. package/Tests/Runtime/Utils/TextureScaleTests.cs +298 -0
  1426. package/Tests/Runtime/Utils/TextureScaleTests.cs.meta +3 -0
  1427. package/Tests/Runtime/Utils/TypeNameSorterAdditionalTests.cs +36 -0
  1428. package/Tests/Runtime/Utils/TypeNameSorterAdditionalTests.cs.meta +11 -0
  1429. package/Tests/Runtime/Utils/TypeNameSorterTests.cs +34 -0
  1430. package/Tests/Runtime/Utils/TypeNameSorterTests.cs.meta +11 -0
  1431. package/Tests/Runtime/Utils/UnityObjectNameComparerEdgeTests.cs +63 -0
  1432. package/Tests/Runtime/Utils/UnityObjectNameComparerEdgeTests.cs.meta +11 -0
  1433. package/Tests/Runtime/Utils/UnityObjectNameComparerTests.cs +59 -0
  1434. package/Tests/Runtime/Utils/UnityObjectNameComparerTests.cs.meta +11 -0
  1435. package/Tests/Runtime/Utils.meta +2 -2
  1436. package/Tests/Runtime/Visuals/AnimatedSpriteLayerTests.cs +266 -0
  1437. package/Tests/Runtime/Visuals/AnimatedSpriteLayerTests.cs.meta +11 -0
  1438. package/Tests/Runtime/Visuals/EnhancedImageTests.cs +153 -0
  1439. package/Tests/Runtime/Visuals/EnhancedImageTests.cs.meta +11 -0
  1440. package/Tests/Runtime/Visuals/LayeredImageTests.cs +422 -0
  1441. package/Tests/Runtime/Visuals/LayeredImageTests.cs.meta +11 -0
  1442. package/Tests/Runtime/Visuals/VisualsTestHelpers.cs +125 -0
  1443. package/Tests/Runtime/Visuals/VisualsTestHelpers.cs.meta +11 -0
  1444. package/Tests/Runtime/Visuals.meta +3 -0
  1445. package/Tests/Runtime/WallstopStudios.UnityHelpers.Tests.Runtime.asmdef +24 -23
  1446. package/Tests/Runtime/WallstopStudios.UnityHelpers.Tests.Runtime.asmdef.meta +7 -7
  1447. package/Tests/Runtime.meta +8 -8
  1448. package/Tests.meta +8 -8
  1449. package/URP/VolumeProfiles/Post Processing Bloom Profile(URP).asset +63 -63
  1450. package/URP/VolumeProfiles/Post Processing Bloom Profile(URP).asset.meta +8 -8
  1451. package/URP/VolumeProfiles.meta +8 -8
  1452. package/URP.meta +8 -8
  1453. package/node_modules.meta +8 -0
  1454. package/package-lock.json.meta +7 -0
  1455. package/package.json +99 -38
  1456. package/package.json.meta +7 -7
  1457. package/scripts/check-eol.ps1 +51 -0
  1458. package/scripts/check-eol.ps1.meta +7 -0
  1459. package/scripts/clean-nul.ps1 +29 -0
  1460. package/scripts/clean-nul.ps1.meta +7 -0
  1461. package/scripts/lint-doc-links.ps1 +80 -0
  1462. package/scripts/lint-doc-links.ps1.meta +7 -0
  1463. package/scripts/lint-tests.ps1 +156 -0
  1464. package/scripts/lint-tests.ps1.meta +7 -0
  1465. package/scripts/normalize-eol.ps1 +68 -0
  1466. package/scripts/normalize-eol.ps1.meta +7 -0
  1467. package/scripts.meta +8 -0
  1468. package/Editor/Sprites/ProjectAnimationSettings.cs +0 -50
  1469. package/Editor/Sprites/ProjectAnimationSettings.cs.meta +0 -3
  1470. package/Editor/Sprites/TextureSettingsApplier.cs +0 -178
  1471. package/Editor/Sprites/TextureSettingsApplier.cs.meta +0 -3
  1472. package/Runtime/Core/Attributes/ParentComponent.cs +0 -189
  1473. package/Runtime/Core/DataStructure/KDTree.cs +0 -434
  1474. package/Runtime/Core/DataStructure/QuadTree.cs +0 -431
  1475. package/Runtime/Core/DataStructure/RTree.cs +0 -356
  1476. package/Runtime/Core/Extension/HashSetExtensions.cs +0 -12
  1477. package/Runtime/Core/Extension/HashSetExtensions.cs.meta +0 -11
  1478. package/Runtime/Core/Math/Line.cs +0 -55
  1479. package/Runtime/Core/Math/Line.cs.meta +0 -11
  1480. package/Runtime/Core/Math/XXHash.cs +0 -310
  1481. package/Runtime/Core/Math/XXHash.cs.meta +0 -11
  1482. package/Tests/Runtime/Components/RelationalComponentsTesterSimple.cs +0 -40
  1483. package/Tests/Runtime/Components.meta +0 -3
  1484. package/Tests/Runtime/DataStructures/BalancedKDTreeTests.cs +0 -14
  1485. package/Tests/Runtime/DataStructures/QuadTreeTests.cs +0 -14
  1486. package/Tests/Runtime/DataStructures/QuadTreeTests.cs.meta +0 -11
  1487. package/Tests/Runtime/DataStructures/SpatialTreeTests.cs +0 -130
  1488. package/Tests/Runtime/DataStructures/SpatialTreeTests.cs.meta +0 -11
  1489. package/Tests/Runtime/DataStructures/UnbalancedKDTreeTests.cs +0 -14
  1490. package/Tests/Runtime/Helper/FormattingHelperTests.cs +0 -129
  1491. package/Tests/Runtime/Helper/FormattingHelperTests.cs.meta +0 -3
  1492. package/Tests/Runtime/Performance/KDTreePerformanceTests.cs +0 -14
  1493. package/Tests/Runtime/Performance/KDTreePerformanceTests.cs.meta +0 -11
  1494. package/Tests/Runtime/Performance/QuadTreePerformanceTests.cs +0 -14
  1495. package/Tests/Runtime/Performance/QuadTreePerformanceTests.cs.meta +0 -11
  1496. package/Tests/Runtime/Performance/SpatialTreePerformanceTest.cs +0 -158
  1497. package/Tests/Runtime/Performance/SpatialTreePerformanceTest.cs.meta +0 -11
  1498. package/Tests/Runtime/Performance/UnbalancedKDTreeTests.cs +0 -14
  1499. package/Tests/Runtime/Performance/UnbalancedKDTreeTests.cs.meta +0 -11
  1500. package/Third Party Notices.md +0 -1
@@ -1,195 +1,2121 @@
1
- namespace WallstopStudios.UnityHelpers.Core.Serialization
2
- {
3
- using System;
4
- using System.ComponentModel;
5
- using System.IO;
6
- using System.Runtime.Serialization.Formatters.Binary;
7
- using System.Text;
8
- using System.Text.Json;
9
- using System.Text.Json.Serialization;
10
- using Extension;
11
- using JsonConverters;
12
- using TypeConverter = JsonConverters.TypeConverter;
13
-
14
- internal static class SerializerEncoding
15
- {
16
- public static readonly Encoding Encoding;
17
- public static readonly JsonSerializerOptions NormalJsonOptions;
18
- public static readonly JsonSerializerOptions PrettyJsonOptions;
19
-
20
- static SerializerEncoding()
21
- {
22
- Encoding = Encoding.UTF8;
23
- NormalJsonOptions = new JsonSerializerOptions
24
- {
25
- IgnoreReadOnlyFields = false,
26
- IgnoreReadOnlyProperties = false,
27
- ReferenceHandler = ReferenceHandler.IgnoreCycles,
28
- IncludeFields = true,
29
- PropertyNameCaseInsensitive = true,
30
- Converters =
31
- {
32
- new JsonStringEnumConverter(),
33
- Vector3Converter.Instance,
34
- Vector2Converter.Instance,
35
- Vector4Converter.Instance,
36
- Matrix4x4Converter.Instance,
37
- TypeConverter.Instance,
38
- GameObjectConverter.Instance,
39
- ColorConverter.Instance,
40
- },
41
- };
42
-
43
- PrettyJsonOptions = new JsonSerializerOptions
44
- {
45
- IgnoreReadOnlyFields = false,
46
- IgnoreReadOnlyProperties = false,
47
- ReferenceHandler = ReferenceHandler.IgnoreCycles,
48
- PropertyNameCaseInsensitive = true,
49
- IncludeFields = true,
50
- Converters =
51
- {
52
- new JsonStringEnumConverter(),
53
- Vector3Converter.Instance,
54
- Vector2Converter.Instance,
55
- Vector4Converter.Instance,
56
- Matrix4x4Converter.Instance,
57
- TypeConverter.Instance,
58
- GameObjectConverter.Instance,
59
- ColorConverter.Instance,
60
- },
61
- WriteIndented = true,
62
- };
63
- }
64
- }
65
-
66
- public enum SerializationType
67
- {
68
- SystemBinary,
69
- Protobuf,
70
- }
71
-
72
- public static class Serializer
73
- {
74
- public static T Deserialize<T>(byte[] serialized, SerializationType serializationType)
75
- {
76
- switch (serializationType)
77
- {
78
- case SerializationType.SystemBinary:
79
- return BinaryDeserialize<T>(serialized);
80
- case SerializationType.Protobuf:
81
- return ProtoDeserialize<T>(serialized);
82
- default:
83
- throw new InvalidEnumArgumentException(
84
- nameof(serializationType),
85
- (int)serializationType,
86
- typeof(SerializationType)
87
- );
88
- }
89
- }
90
-
91
- public static byte[] Serialize<T>(T instance, SerializationType serializationType)
92
- {
93
- switch (serializationType)
94
- {
95
- case SerializationType.SystemBinary:
96
- return BinarySerialize(instance);
97
- case SerializationType.Protobuf:
98
- return ProtoSerialize(instance);
99
- default:
100
- throw new InvalidEnumArgumentException(
101
- nameof(serializationType),
102
- (int)serializationType,
103
- typeof(SerializationType)
104
- );
105
- }
106
- }
107
-
108
- public static T BinaryDeserialize<T>(byte[] data)
109
- {
110
- using MemoryStream memoryStream = new(data);
111
- BinaryFormatter binaryFormatter = new();
112
- memoryStream.Position = 0;
113
- return (T)binaryFormatter.Deserialize(memoryStream);
114
- }
115
-
116
- public static byte[] BinarySerialize<T>(T input)
117
- {
118
- using MemoryStream memoryStream = new();
119
- BinaryFormatter binaryFormatter = new();
120
- binaryFormatter.Serialize(memoryStream, input);
121
- return memoryStream.ToArray();
122
- }
123
-
124
- public static T ProtoDeserialize<T>(byte[] data)
125
- {
126
- using MemoryStream memoryStream = new(data);
127
- return ProtoBuf.Serializer.Deserialize<T>(memoryStream);
128
- }
129
-
130
- public static T ProtoDeserialize<T>(byte[] data, Type type)
131
- {
132
- using MemoryStream memoryStream = new(data);
133
- return (T)ProtoBuf.Serializer.Deserialize(type, memoryStream);
134
- }
135
-
136
- public static byte[] ProtoSerialize<T>(T input)
137
- {
138
- using MemoryStream memoryStream = new();
139
- ProtoBuf.Serializer.Serialize(memoryStream, input);
140
- return memoryStream.ToArray();
141
- }
142
-
143
- public static T JsonDeserialize<T>(string data, Type type = null)
144
- {
145
- return (T)
146
- JsonSerializer.Deserialize(
147
- data,
148
- type ?? typeof(T),
149
- SerializerEncoding.NormalJsonOptions
150
- );
151
- }
152
-
153
- public static byte[] JsonSerialize<T>(T input)
154
- {
155
- return JsonStringify(input).GetBytes();
156
- }
157
-
158
- public static string JsonStringify<T>(T input, bool pretty = false)
159
- {
160
- JsonSerializerOptions options = pretty
161
- ? SerializerEncoding.PrettyJsonOptions
162
- : SerializerEncoding.NormalJsonOptions;
163
- Type parameterType = typeof(T);
164
- if (
165
- parameterType.IsAbstract
166
- || parameterType.IsInterface
167
- || parameterType == typeof(object)
168
- )
169
- {
170
- object data = input;
171
- if (data == null)
172
- {
173
- return "{}";
174
- }
175
-
176
- Type type = data.GetType();
177
- return JsonSerializer.Serialize(data, type, options);
178
- }
179
-
180
- return JsonSerializer.Serialize(input, options);
181
- }
182
-
183
- public static T ReadFromJsonFile<T>(string path)
184
- {
185
- string settingsAsText = File.ReadAllText(path, SerializerEncoding.Encoding);
186
- return JsonDeserialize<T>(settingsAsText);
187
- }
188
-
189
- public static void WriteToJsonFile<T>(T input, string path, bool pretty = true)
190
- {
191
- string jsonAsText = JsonStringify(input, pretty);
192
- File.WriteAllText(path, jsonAsText);
193
- }
194
- }
195
- }
1
+ namespace WallstopStudios.UnityHelpers.Core.Serialization
2
+ {
3
+ using System;
4
+ using System.Buffers;
5
+ using System.Collections.Concurrent;
6
+ using System.ComponentModel;
7
+ using System.IO;
8
+ using System.Linq;
9
+ using System.Reflection;
10
+ using System.Runtime.Serialization.Formatters.Binary;
11
+ using System.Text;
12
+ using System.Text.Json;
13
+ using System.Text.Json.Serialization;
14
+ using System.Threading.Tasks;
15
+ using JsonConverters;
16
+ using ProtoBuf;
17
+ using WallstopStudios.UnityHelpers.Core.Helper;
18
+ using TypeConverter = JsonConverters.TypeConverter;
19
+
20
+ internal static class SerializerEncoding
21
+ {
22
+ public static readonly Encoding Encoding;
23
+ public static readonly JsonSerializerOptions NormalJsonOptions;
24
+ public static readonly JsonSerializerOptions PrettyJsonOptions;
25
+ public static readonly JsonSerializerOptions FastJsonOptions;
26
+ public static readonly JsonSerializerOptions FastPocoJsonOptions;
27
+
28
+ public static JsonSerializerOptions GetNormalJsonOptions()
29
+ {
30
+ return new JsonSerializerOptions
31
+ {
32
+ IgnoreReadOnlyFields = false,
33
+ IgnoreReadOnlyProperties = false,
34
+ ReferenceHandler = ReferenceHandler.IgnoreCycles,
35
+ IncludeFields = true,
36
+ PropertyNameCaseInsensitive = true,
37
+ NumberHandling =
38
+ JsonNumberHandling.AllowNamedFloatingPointLiterals
39
+ | JsonNumberHandling.AllowReadingFromString,
40
+ ReadCommentHandling = JsonCommentHandling.Skip,
41
+ AllowTrailingCommas = true,
42
+ Converters =
43
+ {
44
+ RangeConverterFactory.Instance,
45
+ FastVector2IntConverter.Instance,
46
+ FastVector3IntConverter.Instance,
47
+ new JsonStringEnumConverter(),
48
+ Vector3Converter.Instance,
49
+ Vector2Converter.Instance,
50
+ Vector4Converter.Instance,
51
+ Vector2IntConverter.Instance,
52
+ Vector3IntConverter.Instance,
53
+ Matrix4x4Converter.Instance,
54
+ QuaternionConverter.Instance,
55
+ LayerMaskConverter.Instance,
56
+ ResolutionConverter.Instance,
57
+ RenderTextureDescriptorConverter.Instance,
58
+ MinMaxCurveConverter.Instance,
59
+ MinMaxGradientConverter.Instance,
60
+ ColorBlockConverter.Instance,
61
+ BoundingSphereConverter.Instance,
62
+ RaycastHitConverter.Instance,
63
+ TouchConverter.Instance,
64
+ SceneConverter.Instance,
65
+ PoseConverter.Instance,
66
+ PlaneConverter.Instance,
67
+ RayConverter.Instance,
68
+ Ray2DConverter.Instance,
69
+ RectOffsetConverter.Instance,
70
+ RangeIntConverter.Instance,
71
+ Hash128Converter.Instance,
72
+ AnimationCurveConverter.Instance,
73
+ GradientConverter.Instance,
74
+ SphericalHarmonicsL2Converter.Instance,
75
+ TypeConverter.Instance,
76
+ GameObjectConverter.Instance,
77
+ ColorConverter.Instance,
78
+ Color32Converter.Instance,
79
+ RectConverter.Instance,
80
+ RectIntConverter.Instance,
81
+ BoundsConverter.Instance,
82
+ BoundsIntConverter.Instance,
83
+ BitSetConverter.Instance,
84
+ ImmutableBitSetConverter.Instance,
85
+ DequeConverterFactory.Instance,
86
+ CyclicBufferConverterFactory.Instance,
87
+ KVector2Converter.Instance,
88
+ },
89
+ };
90
+ ;
91
+ }
92
+
93
+ public static JsonSerializerOptions GetPrettyJsonOptions()
94
+ {
95
+ return new JsonSerializerOptions
96
+ {
97
+ IgnoreReadOnlyFields = false,
98
+ IgnoreReadOnlyProperties = false,
99
+ ReferenceHandler = ReferenceHandler.IgnoreCycles,
100
+ PropertyNameCaseInsensitive = true,
101
+ IncludeFields = true,
102
+ NumberHandling =
103
+ JsonNumberHandling.AllowNamedFloatingPointLiterals
104
+ | JsonNumberHandling.AllowReadingFromString,
105
+ ReadCommentHandling = JsonCommentHandling.Skip,
106
+ AllowTrailingCommas = true,
107
+ Converters =
108
+ {
109
+ RangeConverterFactory.Instance,
110
+ FastVector2IntConverter.Instance,
111
+ FastVector3IntConverter.Instance,
112
+ new JsonStringEnumConverter(),
113
+ Vector3Converter.Instance,
114
+ Vector2Converter.Instance,
115
+ Vector4Converter.Instance,
116
+ Vector2IntConverter.Instance,
117
+ Vector3IntConverter.Instance,
118
+ Matrix4x4Converter.Instance,
119
+ QuaternionConverter.Instance,
120
+ LayerMaskConverter.Instance,
121
+ ResolutionConverter.Instance,
122
+ RenderTextureDescriptorConverter.Instance,
123
+ MinMaxCurveConverter.Instance,
124
+ MinMaxGradientConverter.Instance,
125
+ ColorBlockConverter.Instance,
126
+ BoundingSphereConverter.Instance,
127
+ RaycastHitConverter.Instance,
128
+ TouchConverter.Instance,
129
+ SceneConverter.Instance,
130
+ PoseConverter.Instance,
131
+ PlaneConverter.Instance,
132
+ RayConverter.Instance,
133
+ Ray2DConverter.Instance,
134
+ RectOffsetConverter.Instance,
135
+ RangeIntConverter.Instance,
136
+ Hash128Converter.Instance,
137
+ AnimationCurveConverter.Instance,
138
+ GradientConverter.Instance,
139
+ SphericalHarmonicsL2Converter.Instance,
140
+ TypeConverter.Instance,
141
+ GameObjectConverter.Instance,
142
+ ColorConverter.Instance,
143
+ Color32Converter.Instance,
144
+ RectConverter.Instance,
145
+ RectIntConverter.Instance,
146
+ BoundsConverter.Instance,
147
+ BoundsIntConverter.Instance,
148
+ BitSetConverter.Instance,
149
+ ImmutableBitSetConverter.Instance,
150
+ DequeConverterFactory.Instance,
151
+ CyclicBufferConverterFactory.Instance,
152
+ KVector2Converter.Instance,
153
+ },
154
+ WriteIndented = true,
155
+ };
156
+ }
157
+
158
+ public static JsonSerializerOptions GetFastJsonOptions()
159
+ {
160
+ return new JsonSerializerOptions
161
+ {
162
+ IgnoreReadOnlyFields = false,
163
+ IgnoreReadOnlyProperties = true,
164
+ ReferenceHandler = null,
165
+ PropertyNameCaseInsensitive = false,
166
+ IncludeFields = false,
167
+ NumberHandling = JsonNumberHandling.Strict,
168
+ ReadCommentHandling = JsonCommentHandling.Disallow,
169
+ AllowTrailingCommas = false,
170
+ Converters =
171
+ {
172
+ RangeConverterFactory.Instance,
173
+ FastVector2IntConverter.Instance,
174
+ FastVector3IntConverter.Instance,
175
+ Vector3Converter.Instance,
176
+ Vector2Converter.Instance,
177
+ Vector4Converter.Instance,
178
+ Vector2IntConverter.Instance,
179
+ Vector3IntConverter.Instance,
180
+ Matrix4x4Converter.Instance,
181
+ QuaternionConverter.Instance,
182
+ LayerMaskConverter.Instance,
183
+ ResolutionConverter.Instance,
184
+ RenderTextureDescriptorConverter.Instance,
185
+ MinMaxCurveConverter.Instance,
186
+ MinMaxGradientConverter.Instance,
187
+ ColorBlockConverter.Instance,
188
+ BoundingSphereConverter.Instance,
189
+ RaycastHitConverter.Instance,
190
+ TouchConverter.Instance,
191
+ SceneConverter.Instance,
192
+ PoseConverter.Instance,
193
+ PlaneConverter.Instance,
194
+ RayConverter.Instance,
195
+ Ray2DConverter.Instance,
196
+ RectOffsetConverter.Instance,
197
+ RangeIntConverter.Instance,
198
+ Hash128Converter.Instance,
199
+ AnimationCurveConverter.Instance,
200
+ GradientConverter.Instance,
201
+ SphericalHarmonicsL2Converter.Instance,
202
+ TypeConverter.Instance,
203
+ GameObjectConverter.Instance,
204
+ ColorConverter.Instance,
205
+ Color32Converter.Instance,
206
+ RectConverter.Instance,
207
+ RectIntConverter.Instance,
208
+ BoundsConverter.Instance,
209
+ BoundsIntConverter.Instance,
210
+ BitSetConverter.Instance,
211
+ ImmutableBitSetConverter.Instance,
212
+ DequeConverterFactory.Instance,
213
+ CyclicBufferConverterFactory.Instance,
214
+ KVector2Converter.Instance,
215
+ },
216
+ };
217
+ }
218
+
219
+ public static JsonSerializerOptions GetFastPocoJsonOptions()
220
+ {
221
+ return new JsonSerializerOptions
222
+ {
223
+ IgnoreReadOnlyFields = false,
224
+ IgnoreReadOnlyProperties = false,
225
+ ReferenceHandler = null,
226
+ PropertyNameCaseInsensitive = false,
227
+ IncludeFields = false,
228
+ NumberHandling = JsonNumberHandling.Strict,
229
+ ReadCommentHandling = JsonCommentHandling.Disallow,
230
+ AllowTrailingCommas = false,
231
+ // No converters for POCO to minimize overhead
232
+ };
233
+ }
234
+
235
+ static SerializerEncoding()
236
+ {
237
+ Encoding = Encoding.UTF8;
238
+ NormalJsonOptions = GetNormalJsonOptions();
239
+ PrettyJsonOptions = GetPrettyJsonOptions();
240
+ FastJsonOptions = GetFastJsonOptions();
241
+ FastPocoJsonOptions = GetFastPocoJsonOptions();
242
+ }
243
+ }
244
+
245
+ /// <summary>
246
+ /// Selects the wire format used by <see cref="Serializer"/>.
247
+ /// </summary>
248
+ /// <remarks>
249
+ /// Choose a format based on your requirements:
250
+ /// <list type="bullet">
251
+ /// <item>
252
+ /// <description>
253
+ /// <see cref="Json"/> — Human‑readable and diff‑friendly. Uses System.Text.Json with Unity‑aware
254
+ /// converters for common types (e.g., Vector2/3/4, Matrix4x4, Color, Type).
255
+ /// Prefer for save files, configs, and tooling.
256
+ /// </description>
257
+ /// </item>
258
+ /// <item>
259
+ /// <description>
260
+ /// <see cref="Protobuf"/> — Compact binary with great performance using protobuf‑net.
261
+ /// Prefer for networking, large payloads, and memory‑sensitive scenarios.
262
+ /// Requires opt‑in attributes like [ProtoContract]/[ProtoMember] or runtime models.
263
+ /// </description>
264
+ /// </item>
265
+ /// <item>
266
+ /// <description>
267
+ /// <see cref="SystemBinary"/> — .NET BinaryFormatter. Legacy and trusted‑only. Not
268
+ /// cross‑version/portable and unsafe for untrusted input. Use only for ephemeral/dev data.
269
+ /// </description>
270
+ /// </item>
271
+ /// </list>
272
+ /// </remarks>
273
+ public enum SerializationType
274
+ {
275
+ /// <summary>Unspecified format; not valid for read/write.</summary>
276
+ [Obsolete("Please use a valid enum value")]
277
+ None = 0,
278
+
279
+ /// <summary>Legacy .NET BinaryFormatter. Trusted/ephemeral data only.</summary>
280
+ [Obsolete(
281
+ "BinaryFormatter is obsolete and unsafe for untrusted data. "
282
+ + "Prefer Json or Protobuf for new code."
283
+ )]
284
+ SystemBinary = 1,
285
+
286
+ /// <summary>protobuf-net compact binary. Best for networking and high-performance.</summary>
287
+ Protobuf = 2,
288
+
289
+ /// <summary>System.Text.Json text. Human-readable and diff-friendly.</summary>
290
+ Json = 3,
291
+ }
292
+
293
+ /// <summary>
294
+ /// Unified serialization helpers for JSON, protobuf‑net, and legacy BinaryFormatter.
295
+ /// </summary>
296
+ /// <remarks>
297
+ /// Highlights
298
+ /// <list type="bullet">
299
+ /// <item><description>JSON: Uses pooled writers and Unity‑aware converters; supports pretty printing.</description></item>
300
+ /// <item><description>Protobuf: Compact binary via protobuf‑net; supports interface/abstract types via root resolution or <see cref="RegisterProtobufRoot(Type, Type)"/>.</description></item>
301
+ /// <item><description>Binary: Convenience for legacy only; do not feed untrusted data.</description></item>
302
+ /// <item><description>Minimal allocations with ArrayPool-backed streams to reduce GC pressure.</description></item>
303
+ /// </list>
304
+ /// When to use what
305
+ /// <list type="bullet">
306
+ /// <item><description>Prefer <see cref="SerializationType.Json"/> for save systems, settings, and tools.</description></item>
307
+ /// <item><description>Prefer <see cref="SerializationType.Protobuf"/> for networking, large or frequent messages.</description></item>
308
+ /// <item><description>Reserve <see cref="SerializationType.SystemBinary"/> for trusted legacy scenarios only.</description></item>
309
+ /// </list>
310
+ /// </remarks>
311
+ /// <example>
312
+ /// JSON save/config
313
+ /// <code>
314
+ /// var save = new SaveData { Level = 3 };
315
+ /// // To string
316
+ /// string text = Serializer.JsonStringify(save, pretty: true);
317
+ /// // File IO
318
+ /// Serializer.WriteToJsonFile(save, "save.json", pretty: true);
319
+ /// var loaded = Serializer.ReadFromJsonFile&lt;SaveData&gt;("save.json");
320
+ /// </code>
321
+ /// Protobuf networking
322
+ /// <code>
323
+ /// [ProtoContract]
324
+ /// class NetworkMessage { [ProtoMember(1)] public int Id { get; set; } }
325
+ /// byte[] bytes = Serializer.ProtoSerialize(new NetworkMessage { Id = 42 });
326
+ /// NetworkMessage msg = Serializer.ProtoDeserialize&lt;NetworkMessage&gt;(bytes);
327
+ /// </code>
328
+ /// Legacy BinaryFormatter (trusted only)
329
+ /// <code>
330
+ /// byte[] blob = Serializer.BinarySerialize(obj);
331
+ /// var roundtrip = Serializer.BinaryDeserialize&lt;SomeType&gt;(blob);
332
+ /// </code>
333
+ /// </example>
334
+ public static class Serializer
335
+ {
336
+ /// <summary>
337
+ /// Returns a copy of the package's Normal JSON options. The returned instance is independent
338
+ /// of internal defaults, so modifying it won't affect global behavior. Cache and reuse the
339
+ /// returned instance across calls to benefit from System.Text.Json metadata caches.
340
+ /// </summary>
341
+ public static JsonSerializerOptions CreateNormalJsonOptions() =>
342
+ SerializerEncoding.GetNormalJsonOptions();
343
+
344
+ /// <summary>
345
+ /// Returns a copy of the package's Pretty (indented) JSON options.
346
+ /// </summary>
347
+ public static JsonSerializerOptions CreatePrettyJsonOptions() =>
348
+ SerializerEncoding.GetPrettyJsonOptions();
349
+
350
+ /// <summary>
351
+ /// Returns a copy of the package's Fast JSON options, tuned for hot paths with reduced validation
352
+ /// and features to minimize allocations and branching. See docs for trade-offs.
353
+ /// </summary>
354
+ public static JsonSerializerOptions CreateFastJsonOptions() =>
355
+ SerializerEncoding.GetFastJsonOptions();
356
+
357
+ /// <summary>
358
+ /// Returns a copy of the package's Fast POCO JSON options.
359
+ /// Strict, minimal, and with no Unity-specific converters.
360
+ /// Use for pure POCO graphs when you want the fastest possible serialization/deserialization.
361
+ /// Notes:
362
+ /// - Case-sensitive property names (faster matching)
363
+ /// - No comments/trailing commas; strict numbers only
364
+ /// - IncludeFields = false (prefer properties for performance)
365
+ /// - Returns a new instance each call; cache and reuse within your app to leverage STJ metadata caches
366
+ /// </summary>
367
+ public static JsonSerializerOptions CreateFastPocoJsonOptions() =>
368
+ new(SerializerEncoding.FastPocoJsonOptions);
369
+
370
+ // Small protobuf payloads benefit from protobuf-net's MemoryStream fast-path (TryGetBuffer).
371
+ // Larger payloads see wins from our pooled read-only stream to avoid per-iteration allocations.
372
+ private const int ProtobufMemoryStreamThreshold = 4096; // bytes
373
+
374
+ // Optional zero-copy path if protobuf-net supports ReadOnlyMemory<byte>/ReadOnlySequence<byte> overloads
375
+ private static readonly MethodInfo ProtoDeserializeTypeFromROM;
376
+ private static readonly MethodInfo ProtoDeserializeTypeFromROS;
377
+ private static readonly Func<
378
+ Type,
379
+ ReadOnlyMemory<byte>,
380
+ object
381
+ > ProtoDeserializeTypeFromROMFast;
382
+ private static readonly Func<
383
+ Type,
384
+ ReadOnlySequence<byte>,
385
+ object
386
+ > ProtoDeserializeTypeFromROSFast;
387
+
388
+ static Serializer()
389
+ {
390
+ // Initialize protobuf surrogates and any other serialization bootstrapping here
391
+ // so initialization does not depend on JSON option access.
392
+ ProtobufUnityModel.EnsureInitialized();
393
+ try
394
+ {
395
+ MethodInfo[] methods = typeof(ProtoBuf.Serializer).GetMethods(
396
+ BindingFlags.Public | BindingFlags.Static
397
+ );
398
+ foreach (MethodInfo mi in methods)
399
+ {
400
+ if (mi.Name != "Deserialize")
401
+ {
402
+ continue;
403
+ }
404
+
405
+ ParameterInfo[] pars = mi.GetParameters();
406
+ if (pars.Length != 2)
407
+ {
408
+ continue;
409
+ }
410
+
411
+ if (pars[0].ParameterType != typeof(Type))
412
+ {
413
+ continue;
414
+ }
415
+
416
+ Type p1 = pars[1].ParameterType;
417
+ switch (p1.IsGenericType)
418
+ {
419
+ case true when p1.GetGenericTypeDefinition() == typeof(ReadOnlyMemory<>):
420
+ {
421
+ Type genArg = p1.GetGenericArguments()[0];
422
+ if (genArg == typeof(byte))
423
+ {
424
+ ProtoDeserializeTypeFromROM ??= mi;
425
+ try
426
+ {
427
+ ProtoDeserializeTypeFromROMFast =
428
+ ReflectionHelpers.GetStaticMethodInvoker<
429
+ Type,
430
+ ReadOnlyMemory<byte>,
431
+ object
432
+ >(mi);
433
+ }
434
+ catch { }
435
+ }
436
+
437
+ break;
438
+ }
439
+ case true when p1.GetGenericTypeDefinition() == typeof(ReadOnlySequence<>):
440
+ {
441
+ Type genArg = p1.GetGenericArguments()[0];
442
+ if (genArg == typeof(byte))
443
+ {
444
+ ProtoDeserializeTypeFromROS ??= mi;
445
+ try
446
+ {
447
+ ProtoDeserializeTypeFromROSFast =
448
+ ReflectionHelpers.GetStaticMethodInvoker<
449
+ Type,
450
+ ReadOnlySequence<byte>,
451
+ object
452
+ >(mi);
453
+ }
454
+ catch { }
455
+ }
456
+
457
+ break;
458
+ }
459
+ }
460
+ }
461
+ }
462
+ catch
463
+ {
464
+ // Reflection probing failed; keep nulls and fall back to streams
465
+ }
466
+ }
467
+
468
+ private static readonly ConcurrentDictionary<Type, Type> ProtobufRootCache = new();
469
+ private static readonly Type NoRootMarker = typeof(void);
470
+
471
+ // Centralized decision logic for protobuf runtime vs declared handling
472
+ internal static bool ShouldUseRuntimeTypeForProtobuf<T>(
473
+ Type declared,
474
+ T instance,
475
+ bool forceRuntimeType
476
+ )
477
+ {
478
+ if (forceRuntimeType)
479
+ {
480
+ return true;
481
+ }
482
+
483
+ if (declared == null)
484
+ {
485
+ return true;
486
+ }
487
+
488
+ if (declared.IsInterface || declared.IsAbstract || declared == typeof(object))
489
+ {
490
+ return true;
491
+ }
492
+
493
+ // Last resort: if the declared type is a reference type and the runtime type differs,
494
+ // prefer using the runtime serializer to avoid protobuf-net subtype errors.
495
+ if (!declared.IsValueType && instance != null && instance.GetType() != declared)
496
+ {
497
+ return true;
498
+ }
499
+
500
+ return false;
501
+ }
502
+
503
+ private static readonly Utils.WallstopGenericPool<BinaryFormatter> BinaryFormatterPool =
504
+ new(() => new BinaryFormatter());
505
+
506
+ private static readonly Utils.WallstopGenericPool<Utf8JsonWriter> JsonWriterPool = new(
507
+ () => new Utf8JsonWriter(Stream.Null, new JsonWriterOptions { SkipValidation = true }),
508
+ onRelease: writer =>
509
+ {
510
+ writer.Reset(Stream.Null);
511
+ },
512
+ onDisposal: stream => stream.Dispose()
513
+ );
514
+
515
+ /// <summary>
516
+ /// Registers a concrete or abstract protobuf root type for a declared interface/abstract/object type.
517
+ /// The root must be assignable to <paramref name="declared"/> and annotated with [ProtoContract].
518
+ /// Subsequent deserializations to the declared type will use the registered root.
519
+ /// </summary>
520
+ /// <remarks>
521
+ /// Use this when deserializing to an interface/abstract/object and you want deterministic root selection
522
+ /// instead of relying on reflection inference.
523
+ /// </remarks>
524
+ /// <example>
525
+ /// <code>
526
+ /// // Given an interface and concrete implementation
527
+ /// [ProtoContract] class PlayerJoined : IEvent { [ProtoMember(1)] public string Name { get; set; } }
528
+ /// Serializer.RegisterProtobufRoot(typeof(IEvent), typeof(PlayerJoined));
529
+ /// var evt = Serializer.ProtoDeserialize&lt;IEvent&gt;(bytes);
530
+ /// </code>
531
+ /// </example>
532
+ /// <exception cref="ArgumentNullException">If declared or root is null.</exception>
533
+ /// <exception cref="ArgumentException">If root is not assignable to declared or missing [ProtoContract].</exception>
534
+ /// <exception cref="InvalidOperationException">If a conflicting root is already registered.</exception>
535
+ public static void RegisterProtobufRoot(Type declared, Type root)
536
+ {
537
+ if (declared == null)
538
+ {
539
+ throw new ArgumentNullException(nameof(declared));
540
+ }
541
+ if (root == null)
542
+ {
543
+ throw new ArgumentNullException(nameof(root));
544
+ }
545
+ if (!declared.IsAssignableFrom(root))
546
+ {
547
+ throw new ArgumentException(
548
+ $"Type {root.FullName} is not assignable to {declared.FullName}",
549
+ nameof(root)
550
+ );
551
+ }
552
+ if (!ReflectionHelpers.HasAttributeSafe<ProtoContractAttribute>(root))
553
+ {
554
+ throw new ArgumentException(
555
+ $"Type {root.FullName} must be annotated with [ProtoContract]",
556
+ nameof(root)
557
+ );
558
+ }
559
+
560
+ if (ProtobufRootCache.TryGetValue(declared, out Type existing))
561
+ {
562
+ if (existing != root && existing != NoRootMarker)
563
+ {
564
+ throw new InvalidOperationException(
565
+ $"A different root {existing.FullName} is already registered for {declared.FullName}"
566
+ );
567
+ }
568
+ }
569
+
570
+ ProtobufRootCache[declared] = root;
571
+ }
572
+
573
+ /// <summary>
574
+ /// Generic convenience overload for registering a protobuf root type.
575
+ /// </summary>
576
+ /// <remarks>
577
+ /// Useful for polymorphic APIs: map <typeparamref name="TDeclared"/> to <typeparamref name="TRoot"/> once,
578
+ /// then call <see cref="ProtoDeserialize{T}(byte[])"/> for the declared type.
579
+ /// </remarks>
580
+ /// <example>
581
+ /// <code>
582
+ /// Serializer.RegisterProtobufRoot&lt;IEvent, PlayerJoined&gt;();
583
+ /// IEvent evt = Serializer.ProtoDeserialize&lt;IEvent&gt;(bytes);
584
+ /// </code>
585
+ /// </example>
586
+ public static void RegisterProtobufRoot<TDeclared, TRoot>()
587
+ where TRoot : TDeclared
588
+ {
589
+ RegisterProtobufRoot(typeof(TDeclared), typeof(TRoot));
590
+ }
591
+
592
+ /// <summary>
593
+ /// Deserializes a payload that was serialized with the specified <paramref name="serializationType"/>.
594
+ /// </summary>
595
+ /// <typeparam name="T">The target type.</typeparam>
596
+ /// <param name="serialized">Payload bytes to decode.</param>
597
+ /// <param name="serializationType">The format the payload is encoded with.</param>
598
+ /// <returns>The decoded instance.</returns>
599
+ /// <example>
600
+ /// JSON
601
+ /// <code>
602
+ /// byte[] data = Serializer.JsonSerialize(save);
603
+ /// SaveData loaded = Serializer.Deserialize&lt;SaveData&gt;(data, SerializationType.Json);
604
+ /// </code>
605
+ /// Protobuf
606
+ /// <code>
607
+ /// byte[] msg = Serializer.ProtoSerialize(message);
608
+ /// NetworkMessage decoded = Serializer.Deserialize&lt;NetworkMessage&gt;(msg, SerializationType.Protobuf);
609
+ /// </code>
610
+ /// </example>
611
+ public static T Deserialize<T>(byte[] serialized, SerializationType serializationType)
612
+ {
613
+ switch (serializationType)
614
+ {
615
+ #pragma warning disable CS0618 // Type or member is obsolete
616
+ case SerializationType.SystemBinary:
617
+ #pragma warning restore CS0618 // Type or member is obsolete
618
+ {
619
+ return BinaryDeserialize<T>(serialized);
620
+ }
621
+ case SerializationType.Protobuf:
622
+ {
623
+ return ProtoDeserialize<T>(serialized);
624
+ }
625
+ case SerializationType.Json:
626
+ {
627
+ return JsonDeserialize<T>(serialized);
628
+ }
629
+ default:
630
+ {
631
+ throw new InvalidEnumArgumentException(
632
+ nameof(serializationType),
633
+ (int)serializationType,
634
+ typeof(SerializationType)
635
+ );
636
+ }
637
+ }
638
+ }
639
+
640
+ /// <summary>
641
+ /// Serializes an instance into bytes using the specified <paramref name="serializationType"/>.
642
+ /// </summary>
643
+ /// <typeparam name="T">The instance type.</typeparam>
644
+ /// <param name="instance">The instance to encode.</param>
645
+ /// <param name="serializationType">The target wire format.</param>
646
+ /// <returns>Serialized bytes.</returns>
647
+ /// <example>
648
+ /// <code>
649
+ /// // As bytes
650
+ /// byte[] data = Serializer.Serialize(save, SerializationType.Json);
651
+ /// // Later
652
+ /// SaveData loaded = Serializer.Deserialize&lt;SaveData&gt;(data, SerializationType.Json);
653
+ /// </code>
654
+ /// </example>
655
+ public static byte[] Serialize<T>(T instance, SerializationType serializationType)
656
+ {
657
+ switch (serializationType)
658
+ {
659
+ #pragma warning disable CS0618 // Type or member is obsolete
660
+ case SerializationType.SystemBinary:
661
+ #pragma warning restore CS0618 // Type or member is obsolete
662
+ {
663
+ return BinarySerialize(instance);
664
+ }
665
+ case SerializationType.Protobuf:
666
+ {
667
+ return ProtoSerialize(instance);
668
+ }
669
+ case SerializationType.Json:
670
+ {
671
+ return JsonSerialize(instance);
672
+ }
673
+ default:
674
+ {
675
+ throw new InvalidEnumArgumentException(
676
+ nameof(serializationType),
677
+ (int)serializationType,
678
+ typeof(SerializationType)
679
+ );
680
+ }
681
+ }
682
+ }
683
+
684
+ /// <summary>
685
+ /// Serializes into a caller-provided buffer to avoid an extra allocation.
686
+ /// </summary>
687
+ /// <typeparam name="T">The instance type.</typeparam>
688
+ /// <param name="instance">The instance to encode.</param>
689
+ /// <param name="serializationType">The target wire format.</param>
690
+ /// <param name="buffer">Destination buffer reference. Resized if too small.</param>
691
+ /// <returns>The number of valid bytes written to <paramref name="buffer"/>.</returns>
692
+ public static int Serialize<T>(
693
+ T instance,
694
+ SerializationType serializationType,
695
+ ref byte[] buffer
696
+ )
697
+ {
698
+ switch (serializationType)
699
+ {
700
+ #pragma warning disable CS0618 // Type or member is obsolete
701
+ case SerializationType.SystemBinary:
702
+ #pragma warning restore CS0618 // Type or member is obsolete
703
+ {
704
+ return BinarySerialize(instance, ref buffer);
705
+ }
706
+ case SerializationType.Protobuf:
707
+ {
708
+ return ProtoSerialize(instance, ref buffer);
709
+ }
710
+ case SerializationType.Json:
711
+ {
712
+ return JsonSerialize(instance, ref buffer);
713
+ }
714
+ default:
715
+ {
716
+ throw new InvalidEnumArgumentException(
717
+ nameof(serializationType),
718
+ (int)serializationType,
719
+ typeof(SerializationType)
720
+ );
721
+ }
722
+ }
723
+ }
724
+
725
+ /// <summary>
726
+ /// Deserializes bytes using legacy <c>BinaryFormatter</c>.
727
+ /// </summary>
728
+ /// <typeparam name="T">Target type.</typeparam>
729
+ /// <param name="data">Serialized bytes.</param>
730
+ /// <remarks>
731
+ /// Security: Never deserialize untrusted data with BinaryFormatter. It is obsolete and unsafe.
732
+ /// Portability: Fragile across versions/platforms; avoid for long‑lived data.
733
+ /// Prefer <see cref="JsonDeserialize{T}(string, System.Type, System.Text.Json.JsonSerializerOptions)"/> or <see cref="ProtoDeserialize{T}(byte[])"/> in production.
734
+ /// </remarks>
735
+ public static T BinaryDeserialize<T>(byte[] data)
736
+ {
737
+ using Utils.PooledResource<PooledReadOnlyMemoryStream> lease =
738
+ PooledReadOnlyMemoryStream.Rent(out PooledReadOnlyMemoryStream stream);
739
+ stream.SetBuffer(data);
740
+ using Utils.PooledResource<BinaryFormatter> fmtLease = BinaryFormatterPool.Get(
741
+ out BinaryFormatter binaryFormatter
742
+ );
743
+ return (T)binaryFormatter.Deserialize(stream);
744
+ }
745
+
746
+ /// <summary>
747
+ /// Serializes an object using legacy <c>BinaryFormatter</c>.
748
+ /// </summary>
749
+ /// <typeparam name="T">Instance type.</typeparam>
750
+ /// <param name="input">Object to serialize.</param>
751
+ /// <returns>Serialized bytes.</returns>
752
+ /// <remarks>
753
+ /// Use for trusted, temporary data only. Not safe for untrusted input. Prefer JSON or protobuf.
754
+ /// </remarks>
755
+ public static byte[] BinarySerialize<T>(T input)
756
+ {
757
+ using Utils.PooledResource<PooledBufferStream> lease = PooledBufferStream.Rent(
758
+ out PooledBufferStream stream
759
+ );
760
+ using Utils.PooledResource<BinaryFormatter> fmtLease = BinaryFormatterPool.Get(
761
+ out BinaryFormatter binaryFormatter
762
+ );
763
+ binaryFormatter.Serialize(stream, input);
764
+ byte[] buffer = null;
765
+ stream.ToArrayExact(ref buffer);
766
+ return buffer;
767
+ }
768
+
769
+ /// <summary>
770
+ /// Serializes to a caller buffer using <c>BinaryFormatter</c>.
771
+ /// </summary>
772
+ /// <typeparam name="T">Instance type.</typeparam>
773
+ /// <param name="input">Object to serialize.</param>
774
+ /// <param name="buffer">Destination buffer reference. Resized if necessary.</param>
775
+ /// <returns>Number of bytes written.</returns>
776
+ public static int BinarySerialize<T>(T input, ref byte[] buffer)
777
+ {
778
+ using Utils.PooledResource<PooledBufferStream> lease = PooledBufferStream.Rent(
779
+ out PooledBufferStream stream
780
+ );
781
+ using Utils.PooledResource<BinaryFormatter> fmtLease = BinaryFormatterPool.Get(
782
+ out BinaryFormatter binaryFormatter
783
+ );
784
+ binaryFormatter.Serialize(stream, input);
785
+ return stream.ToArrayExact(ref buffer);
786
+ }
787
+
788
+ /// <summary>
789
+ /// Deserializes protobuf‑net bytes to <typeparamref name="T"/>.
790
+ /// </summary>
791
+ /// <typeparam name="T">Target type.</typeparam>
792
+ /// <param name="data">Encoded protobuf payload.</param>
793
+ /// <returns>The decoded instance.</returns>
794
+ /// <remarks>
795
+ /// Polymorphism and interfaces:
796
+ /// - If <typeparamref name="T"/> is an interface, abstract type, or <see cref="object"/>, deserialization
797
+ /// requires a concrete root type. We resolve this by either using an abstract base that is marked with
798
+ /// <c>[ProtoContract]</c> and <c>[ProtoInclude]</c> for all subtypes (e.g.,
799
+ /// <c>AbstractRandom</c> in the random package) or by a previously registered mapping via
800
+ /// <see cref="RegisterProtobufRoot{TDeclared, TRoot}()"/>. If no unique root is found, a
801
+ /// <see cref="ProtoException"/> is thrown to avoid ambiguous heuristics.
802
+ ///
803
+ /// Examples
804
+ /// <code><![CDATA[
805
+ /// // 1) Using an abstract base with [ProtoInclude]s
806
+ /// [ProtoContract]
807
+ /// abstract class Message { }
808
+ /// [ProtoContract] class Ping : Message { [ProtoMember(1)] public int Id { get; set; } }
809
+ /// // Deserialize to the abstract base; protobuf-net resolves to Ping
810
+ /// Message m = Serializer.ProtoDeserialize<Message>(bytes);
811
+ ///
812
+ /// // 2) Using an interface by registering a root
813
+ /// interface IEvent { }
814
+ /// [ProtoContract] class PlayerJoined : IEvent { [ProtoMember(1)] public string Name { get; set; } }
815
+ /// Serializer.RegisterProtobufRoot<IEvent, PlayerJoined>();
816
+ /// IEvent evt = Serializer.ProtoDeserialize<IEvent>(bytes);
817
+ ///
818
+ /// // 3) Overload that specifies the concrete type explicitly
819
+ /// IEvent evt2 = Serializer.ProtoDeserialize<IEvent>(bytes, typeof(PlayerJoined));
820
+ /// ]]></code>
821
+ /// </remarks>
822
+ public static T ProtoDeserialize<T>(byte[] data)
823
+ {
824
+ if (data == null)
825
+ {
826
+ throw new ProtoException("No data provided for Protobuf deserialization.");
827
+ }
828
+ try
829
+ {
830
+ // Prefer zero-copy ROM/ROS overloads when available
831
+ if (ProtoDeserializeTypeFromROMFast != null)
832
+ {
833
+ ReadOnlyMemory<byte> rom = new(data);
834
+ Type declared = typeof(T);
835
+ if (
836
+ ShouldUseRuntimeTypeForProtobuf<T>(
837
+ declared,
838
+ default,
839
+ forceRuntimeType: false
840
+ )
841
+ )
842
+ {
843
+ Type root = ResolveProtobufRootType(declared);
844
+ if (root != null)
845
+ {
846
+ return (T)ProtoDeserializeTypeFromROMFast(root, rom);
847
+ }
848
+
849
+ throw new ProtoException(
850
+ $"Unable to resolve a unique protobuf root for declared type {declared.FullName}. Register a root via RegisterProtobufRoot or annotate a shared abstract base with [ProtoInclude]s."
851
+ );
852
+ }
853
+
854
+ return (T)ProtoDeserializeTypeFromROMFast(declared, rom);
855
+ }
856
+
857
+ if (ProtoDeserializeTypeFromROSFast != null)
858
+ {
859
+ ReadOnlySequence<byte> ros = new(data);
860
+ Type declared = typeof(T);
861
+ if (
862
+ ShouldUseRuntimeTypeForProtobuf<T>(
863
+ declared,
864
+ default,
865
+ forceRuntimeType: false
866
+ )
867
+ )
868
+ {
869
+ Type root = ResolveProtobufRootType(declared);
870
+ if (root != null)
871
+ {
872
+ return (T)ProtoDeserializeTypeFromROSFast(root, ros);
873
+ }
874
+
875
+ throw new ProtoException(
876
+ $"Unable to resolve a unique protobuf root for declared type {declared.FullName}. Register a root via RegisterProtobufRoot or annotate a shared abstract base with [ProtoInclude]s."
877
+ );
878
+ }
879
+
880
+ return (T)ProtoDeserializeTypeFromROSFast(declared, ros);
881
+ }
882
+
883
+ // For small payloads, allow protobuf-net to use MemoryStream's non-copy buffer access
884
+ if (data.Length <= ProtobufMemoryStreamThreshold)
885
+ {
886
+ using MemoryStream ms = new(data, writable: false);
887
+ Type declared = typeof(T);
888
+ if (
889
+ ShouldUseRuntimeTypeForProtobuf<T>(
890
+ declared,
891
+ default,
892
+ forceRuntimeType: false
893
+ )
894
+ )
895
+ {
896
+ Type root = ResolveProtobufRootType(declared);
897
+ if (root != null)
898
+ {
899
+ return (T)ProtoBuf.Serializer.Deserialize(root, ms);
900
+ }
901
+
902
+ throw new ProtoException(
903
+ $"Unable to resolve a unique protobuf root for declared type {declared.FullName}. Register a root via RegisterProtobufRoot or annotate a shared abstract base with [ProtoInclude]s."
904
+ );
905
+ }
906
+
907
+ return ProtoBuf.Serializer.Deserialize<T>(ms);
908
+ }
909
+
910
+ // For larger payloads, prefer pooled stream to avoid per-iteration allocations
911
+ using Utils.PooledResource<PooledReadOnlyMemoryStream> lease =
912
+ PooledReadOnlyMemoryStream.Rent(out PooledReadOnlyMemoryStream stream);
913
+ stream.SetBuffer(data);
914
+
915
+ Type declaredLarge = typeof(T);
916
+ if (
917
+ ShouldUseRuntimeTypeForProtobuf<T>(
918
+ declaredLarge,
919
+ default,
920
+ forceRuntimeType: false
921
+ )
922
+ )
923
+ {
924
+ Type root = ResolveProtobufRootType(declaredLarge);
925
+ if (root != null)
926
+ {
927
+ return (T)ProtoBuf.Serializer.Deserialize(root, stream);
928
+ }
929
+
930
+ throw new ProtoException(
931
+ $"Unable to resolve a unique protobuf root for declared type {declaredLarge.FullName}. Register a root via RegisterProtobufRoot or annotate a shared abstract base with [ProtoInclude]s."
932
+ );
933
+ }
934
+
935
+ return ProtoBuf.Serializer.Deserialize<T>(stream);
936
+ }
937
+ catch (ProtoException)
938
+ {
939
+ throw;
940
+ }
941
+ catch (Exception ex)
942
+ {
943
+ throw new ProtoException(
944
+ "Protobuf deserialization failed: invalid or corrupted data.",
945
+ ex
946
+ );
947
+ }
948
+ }
949
+
950
+ // Attempts to resolve a concrete root type for protobuf-net when the declared generic type
951
+ // is interface/abstract/object.
952
+ // Rules:
953
+ // - If a root is explicitly registered, use it.
954
+ // - If the declared type itself is an abstract [ProtoContract] (with [ProtoInclude]s), return the declared type
955
+ // to allow protobuf-net to handle subtypes via includes.
956
+ // - Do not auto-pick implementations based on reflection heuristics; require registration instead to avoid
957
+ // ambiguity and brittle ordering of loaded types.
958
+ private static Type ResolveProtobufRootType(Type declared)
959
+ {
960
+ if (declared == null)
961
+ {
962
+ return null;
963
+ }
964
+
965
+ // If declared is already a usable concrete type, just return it
966
+ if (!declared.IsInterface && !declared.IsAbstract && declared != typeof(object))
967
+ {
968
+ return declared;
969
+ }
970
+
971
+ // If declared itself is an abstract [ProtoContract] base with [ProtoInclude]s, prefer it
972
+ if (
973
+ declared.IsAbstract
974
+ && ReflectionHelpers.HasAttributeSafe<ProtoContractAttribute>(declared)
975
+ )
976
+ {
977
+ return declared;
978
+ }
979
+
980
+ if (ProtobufRootCache.TryGetValue(declared, out Type cached))
981
+ {
982
+ return cached == NoRootMarker ? null : cached;
983
+ }
984
+
985
+ // Try to resolve a unique abstract [ProtoContract] base that implements the declared interface.
986
+ // This allows scenarios like: IRandom -> AbstractRandom (annotated with [ProtoContract] + [ProtoInclude]).
987
+ // We deliberately keep the search local to the declaring assembly to avoid brittle cross-assembly heuristics.
988
+ if (declared.IsInterface && declared != typeof(object))
989
+ {
990
+ try
991
+ {
992
+ Type[] types = ReflectionHelpers.GetTypesFromAssembly(declared.Assembly);
993
+ Type[] candidates = types
994
+ .Where(t =>
995
+ t.IsClass
996
+ && t.IsAbstract
997
+ && declared.IsAssignableFrom(t)
998
+ && ReflectionHelpers.HasAttributeSafe<ProtoContractAttribute>(t)
999
+ )
1000
+ .ToArray();
1001
+
1002
+ switch (candidates.Length)
1003
+ {
1004
+ case 1:
1005
+ {
1006
+ Type root = candidates[0];
1007
+ ProtobufRootCache[declared] = root;
1008
+ return root;
1009
+ }
1010
+ case > 1:
1011
+ {
1012
+ // Prefer a candidate that explicitly declares [ProtoInclude]s if this disambiguates
1013
+ Type[] includeCandidates = candidates
1014
+ .Where(t =>
1015
+ ReflectionHelpers.HasAttributeSafe<ProtoIncludeAttribute>(t)
1016
+ )
1017
+ .ToArray();
1018
+
1019
+ if (includeCandidates.Length == 1)
1020
+ {
1021
+ Type root = includeCandidates[0];
1022
+ ProtobufRootCache[declared] = root;
1023
+ return root;
1024
+ }
1025
+
1026
+ break;
1027
+ }
1028
+ }
1029
+ }
1030
+ catch
1031
+ {
1032
+ // Reflection may fail in some restricted environments; fall through to marker/null
1033
+ }
1034
+ }
1035
+
1036
+ ProtobufRootCache[declared] = NoRootMarker;
1037
+ return null;
1038
+ }
1039
+
1040
+ /// <summary>
1041
+ /// Deserializes protobuf‑net bytes into the provided <paramref name="type"/>.
1042
+ /// </summary>
1043
+ /// <typeparam name="T">Expected return type after cast.</typeparam>
1044
+ /// <param name="data">Encoded protobuf payload.</param>
1045
+ /// <param name="type">Concrete type to deserialize to.</param>
1046
+ /// <returns>The decoded instance cast to <typeparamref name="T"/>.</returns>
1047
+ public static T ProtoDeserialize<T>(byte[] data, Type type)
1048
+ {
1049
+ if (data == null)
1050
+ {
1051
+ throw new ArgumentException(nameof(data));
1052
+ }
1053
+
1054
+ if (type == null)
1055
+ {
1056
+ throw new ArgumentNullException(nameof(type));
1057
+ }
1058
+
1059
+ try
1060
+ {
1061
+ // Prefer zero-copy ROM/ROS overloads when available
1062
+ if (ProtoDeserializeTypeFromROMFast != null)
1063
+ {
1064
+ ReadOnlyMemory<byte> rom = new(data);
1065
+ return (T)ProtoDeserializeTypeFromROMFast(type, rom);
1066
+ }
1067
+ if (ProtoDeserializeTypeFromROSFast != null)
1068
+ {
1069
+ ReadOnlySequence<byte> ros = new(data);
1070
+ return (T)ProtoDeserializeTypeFromROSFast(type, ros);
1071
+ }
1072
+
1073
+ if (data.Length <= ProtobufMemoryStreamThreshold)
1074
+ {
1075
+ using MemoryStream ms = new(data, writable: false);
1076
+ return (T)ProtoBuf.Serializer.Deserialize(type, ms);
1077
+ }
1078
+
1079
+ using Utils.PooledResource<PooledReadOnlyMemoryStream> lease =
1080
+ PooledReadOnlyMemoryStream.Rent(out PooledReadOnlyMemoryStream stream);
1081
+ stream.SetBuffer(data);
1082
+ return (T)ProtoBuf.Serializer.Deserialize(type, stream);
1083
+ }
1084
+ catch (ProtoException)
1085
+ {
1086
+ throw;
1087
+ }
1088
+ catch (Exception ex)
1089
+ {
1090
+ throw new ProtoException(
1091
+ "Protobuf deserialization failed: invalid or corrupted data.",
1092
+ ex
1093
+ );
1094
+ }
1095
+ }
1096
+
1097
+ /// <summary>
1098
+ /// Serializes an instance to protobuf‑net bytes.
1099
+ /// </summary>
1100
+ /// <typeparam name="T">Declared type.</typeparam>
1101
+ /// <param name="input">The instance to serialize.</param>
1102
+ /// <param name="forceRuntimeType">When true, always serialize as the runtime type; otherwise uses declared type unless it is interface/abstract/object.</param>
1103
+ /// <returns>Serialized bytes.</returns>
1104
+ /// <example>
1105
+ /// <code>
1106
+ /// [ProtoContract]
1107
+ /// class NetworkMessage { [ProtoMember(1)] public int Id { get; set; } }
1108
+ /// var bytes = Serializer.ProtoSerialize(new NetworkMessage { Id = 5 });
1109
+ /// var msg = Serializer.ProtoDeserialize&lt;NetworkMessage&gt;(bytes);
1110
+ /// </code>
1111
+ /// </example>
1112
+ public static byte[] ProtoSerialize<T>(T input, bool forceRuntimeType = false)
1113
+ {
1114
+ using Utils.PooledResource<PooledBufferStream> lease = PooledBufferStream.Rent(
1115
+ out PooledBufferStream stream
1116
+ );
1117
+ Type declared = typeof(T);
1118
+ bool useRuntime = ShouldUseRuntimeTypeForProtobuf(declared, input, forceRuntimeType);
1119
+
1120
+ if (useRuntime)
1121
+ {
1122
+ ProtoBuf.Serializer.NonGeneric.Serialize(stream, input);
1123
+ }
1124
+ else
1125
+ {
1126
+ ProtoBuf.Serializer.Serialize(stream, input);
1127
+ }
1128
+
1129
+ byte[] buffer = null;
1130
+ stream.ToArrayExact(ref buffer);
1131
+ return buffer;
1132
+ }
1133
+
1134
+ /// <summary>
1135
+ /// Serializes an instance to protobuf‑net bytes into a caller-provided buffer.
1136
+ /// </summary>
1137
+ /// <typeparam name="T">Declared type.</typeparam>
1138
+ /// <param name="input">The instance to serialize.</param>
1139
+ /// <param name="buffer">Destination buffer reference. Resized if necessary.</param>
1140
+ /// <param name="forceRuntimeType">When true, always serialize as the runtime type.</param>
1141
+ /// <returns>Number of bytes written.</returns>
1142
+ public static int ProtoSerialize<T>(
1143
+ T input,
1144
+ ref byte[] buffer,
1145
+ bool forceRuntimeType = false
1146
+ )
1147
+ {
1148
+ using Utils.PooledResource<PooledBufferStream> lease = PooledBufferStream.Rent(
1149
+ out PooledBufferStream stream
1150
+ );
1151
+ Type declared = typeof(T);
1152
+ bool useRuntime = ShouldUseRuntimeTypeForProtobuf(declared, input, forceRuntimeType);
1153
+
1154
+ if (useRuntime)
1155
+ {
1156
+ ProtoBuf.Serializer.NonGeneric.Serialize(stream, input);
1157
+ }
1158
+ else
1159
+ {
1160
+ ProtoBuf.Serializer.Serialize(stream, input);
1161
+ }
1162
+ return stream.ToArrayExact(ref buffer);
1163
+ }
1164
+
1165
+ /// <summary>
1166
+ /// Deserializes JSON text to <typeparamref name="T"/> using Unity‑aware converters.
1167
+ /// </summary>
1168
+ /// <typeparam name="T">Target type.</typeparam>
1169
+ /// <param name="data">JSON string.</param>
1170
+ /// <param name="type">Optional concrete target type (defaults to <typeparamref name="T"/>).</param>
1171
+ /// <param name="options">Serializer options; defaults include converters for Unity types and ReferenceHandler.IgnoreCycles.</param>
1172
+ /// <returns>The decoded instance.</returns>
1173
+ public static T JsonDeserialize<T>(
1174
+ string data,
1175
+ Type type = null,
1176
+ JsonSerializerOptions options = null
1177
+ )
1178
+ {
1179
+ return (T)
1180
+ JsonSerializer.Deserialize(
1181
+ data,
1182
+ type ?? typeof(T),
1183
+ options ?? SerializerEncoding.NormalJsonOptions
1184
+ );
1185
+ }
1186
+
1187
+ /// <summary>
1188
+ /// Deserializes JSON bytes (UTF-8) to <typeparamref name="T"/> using Unity-aware converters.
1189
+ /// Avoids intermediate string allocation by using span-based System.Text.Json APIs.
1190
+ /// </summary>
1191
+ /// <typeparam name="T">Target type.</typeparam>
1192
+ /// <param name="data">UTF-8 JSON bytes.</param>
1193
+ /// <param name="type">Optional concrete target type (defaults to <typeparamref name="T"/>).</param>
1194
+ /// <param name="options">Serializer options; defaults include Unity converters.</param>
1195
+ /// <returns>The decoded instance.</returns>
1196
+ public static T JsonDeserialize<T>(
1197
+ byte[] data,
1198
+ Type type = null,
1199
+ JsonSerializerOptions options = null
1200
+ )
1201
+ {
1202
+ if (data == null)
1203
+ {
1204
+ throw new ArgumentNullException(nameof(data));
1205
+ }
1206
+
1207
+ ReadOnlySpan<byte> span = new(data);
1208
+ return (T)
1209
+ JsonSerializer.Deserialize(
1210
+ span,
1211
+ type ?? typeof(T),
1212
+ options ?? SerializerEncoding.NormalJsonOptions
1213
+ );
1214
+ }
1215
+
1216
+ /// <summary>
1217
+ /// Fast-path JSON deserialize using strict, allocation-lean options.
1218
+ /// </summary>
1219
+ public static T JsonDeserializeFast<T>(byte[] data)
1220
+ {
1221
+ if (data == null)
1222
+ {
1223
+ throw new ArgumentNullException(nameof(data));
1224
+ }
1225
+ ReadOnlySpan<byte> span = new(data);
1226
+ return JsonSerializer.Deserialize<T>(span, SerializerEncoding.FastJsonOptions);
1227
+ }
1228
+
1229
+ /// <summary>
1230
+ /// Serializes an instance to JSON bytes (UTF‑8) using Unity‑aware converters.
1231
+ /// </summary>
1232
+ /// <typeparam name="T">Instance type.</typeparam>
1233
+ /// <param name="input">The instance to serialize.</param>
1234
+ /// <returns>UTF‑8 JSON bytes.</returns>
1235
+ public static byte[] JsonSerialize<T>(T input)
1236
+ {
1237
+ using Utils.PooledResource<PooledArrayBufferWriter> lease =
1238
+ PooledArrayBufferWriter.Rent(out PooledArrayBufferWriter bufferWriter);
1239
+ WriteJsonToBuffer(input, SerializerEncoding.NormalJsonOptions, bufferWriter);
1240
+ byte[] buffer = null;
1241
+ bufferWriter.ToArrayExact(ref buffer);
1242
+ return buffer;
1243
+ }
1244
+
1245
+ /// <summary>
1246
+ /// Serializes an instance to JSON bytes (UTF-8) using caller-provided options.
1247
+ /// Tip: Reuse the same options instance across calls to benefit from metadata caches.
1248
+ /// </summary>
1249
+ public static byte[] JsonSerialize<T>(T input, JsonSerializerOptions options)
1250
+ {
1251
+ using Utils.PooledResource<PooledArrayBufferWriter> lease =
1252
+ PooledArrayBufferWriter.Rent(out PooledArrayBufferWriter bufferWriter);
1253
+ WriteJsonToBuffer(input, options ?? SerializerEncoding.NormalJsonOptions, bufferWriter);
1254
+ byte[] buffer = null;
1255
+ bufferWriter.ToArrayExact(ref buffer);
1256
+ return buffer;
1257
+ }
1258
+
1259
+ /// <summary>
1260
+ /// Serializes an instance to JSON bytes (UTF‑8) into a caller-provided buffer.
1261
+ /// </summary>
1262
+ /// <typeparam name="T">Instance type.</typeparam>
1263
+ /// <param name="input">The instance to serialize.</param>
1264
+ /// <param name="buffer">Destination buffer reference. Resized if necessary.</param>
1265
+ /// <returns>Number of bytes written.</returns>
1266
+ public static int JsonSerialize<T>(T input, ref byte[] buffer)
1267
+ {
1268
+ using Utils.PooledResource<PooledArrayBufferWriter> lease =
1269
+ PooledArrayBufferWriter.Rent(out PooledArrayBufferWriter bufferWriter);
1270
+ WriteJsonToBuffer(input, SerializerEncoding.NormalJsonOptions, bufferWriter);
1271
+ return bufferWriter.ToArrayExact(ref buffer);
1272
+ }
1273
+
1274
+ /// <summary>
1275
+ /// Serializes into a caller-provided buffer using caller options.
1276
+ /// Reuses the provided buffer when large enough to avoid allocations; resizes if necessary.
1277
+ /// </summary>
1278
+ public static int JsonSerialize<T>(
1279
+ T input,
1280
+ JsonSerializerOptions options,
1281
+ ref byte[] buffer
1282
+ )
1283
+ {
1284
+ using Utils.PooledResource<PooledArrayBufferWriter> lease =
1285
+ PooledArrayBufferWriter.Rent(out PooledArrayBufferWriter bufferWriter);
1286
+ WriteJsonToBuffer(input, options ?? SerializerEncoding.NormalJsonOptions, bufferWriter);
1287
+ return bufferWriter.ToArrayExact(ref buffer);
1288
+ }
1289
+
1290
+ /// <summary>
1291
+ /// Serializes into a caller-provided buffer using caller options and a size hint to reduce growth copies.
1292
+ /// Provide an approximate size of the final payload to minimize buffer growth/copy churn for large outputs.
1293
+ /// Example: for large int[] payloads, estimate (count * 12) + overhead.
1294
+ /// </summary>
1295
+ public static int JsonSerialize<T>(
1296
+ T input,
1297
+ JsonSerializerOptions options,
1298
+ int sizeHint,
1299
+ ref byte[] buffer
1300
+ )
1301
+ {
1302
+ using Utils.PooledResource<PooledArrayBufferWriter> lease =
1303
+ PooledArrayBufferWriter.Rent(out PooledArrayBufferWriter bufferWriter);
1304
+ if (sizeHint > 0)
1305
+ {
1306
+ bufferWriter.Preallocate(sizeHint);
1307
+ }
1308
+ WriteJsonToBuffer(input, options ?? SerializerEncoding.NormalJsonOptions, bufferWriter);
1309
+ return bufferWriter.ToArrayExact(ref buffer);
1310
+ }
1311
+
1312
+ /// <summary>
1313
+ /// Fast-path JSON serialize using strict, allocation-lean options.
1314
+ /// </summary>
1315
+ public static byte[] JsonSerializeFast<T>(T input)
1316
+ {
1317
+ using Utils.PooledResource<PooledArrayBufferWriter> lease =
1318
+ PooledArrayBufferWriter.Rent(out PooledArrayBufferWriter bufferWriter);
1319
+ WriteJsonToBuffer(input, SerializerEncoding.FastJsonOptions, bufferWriter);
1320
+ byte[] buffer = null;
1321
+ bufferWriter.ToArrayExact(ref buffer);
1322
+ return buffer;
1323
+ }
1324
+
1325
+ /// <summary>
1326
+ /// Fast-path JSON serialize into a caller-provided buffer.
1327
+ /// </summary>
1328
+ public static int JsonSerializeFast<T>(T input, ref byte[] buffer)
1329
+ {
1330
+ using Utils.PooledResource<PooledArrayBufferWriter> lease =
1331
+ PooledArrayBufferWriter.Rent(out PooledArrayBufferWriter bufferWriter);
1332
+ WriteJsonToBuffer(input, SerializerEncoding.FastJsonOptions, bufferWriter);
1333
+ return bufferWriter.ToArrayExact(ref buffer);
1334
+ }
1335
+
1336
+ private static void WriteJsonToStream<T>(
1337
+ T input,
1338
+ JsonSerializerOptions options,
1339
+ Stream stream
1340
+ )
1341
+ {
1342
+ if (options == null)
1343
+ {
1344
+ throw new ArgumentNullException(nameof(options));
1345
+ }
1346
+ if (stream == null)
1347
+ {
1348
+ throw new ArgumentNullException(nameof(stream));
1349
+ }
1350
+
1351
+ using (JsonWriterPool.Get(out Utf8JsonWriter writer))
1352
+ {
1353
+ writer.Reset(stream);
1354
+ Type parameterType = typeof(T);
1355
+ if (
1356
+ parameterType.IsAbstract
1357
+ || parameterType.IsInterface
1358
+ || parameterType == typeof(object)
1359
+ )
1360
+ {
1361
+ object data = input;
1362
+ if (data == null)
1363
+ {
1364
+ writer.WriteStartObject();
1365
+ writer.WriteEndObject();
1366
+ writer.Flush();
1367
+ return;
1368
+ }
1369
+
1370
+ Type type = data.GetType();
1371
+ JsonSerializer.Serialize(writer, data, type, options);
1372
+ }
1373
+ else
1374
+ {
1375
+ JsonSerializer.Serialize(writer, input, options);
1376
+ }
1377
+ writer.Flush();
1378
+ }
1379
+ }
1380
+
1381
+ /// <summary>
1382
+ /// Serializes an instance to a JSON string.
1383
+ /// </summary>
1384
+ /// <typeparam name="T">Instance type.</typeparam>
1385
+ /// <param name="input">The instance to serialize.</param>
1386
+ /// <param name="pretty">Write indented output when true.</param>
1387
+ /// <returns>JSON text.</returns>
1388
+ /// <example>
1389
+ /// <code>
1390
+ /// var json = Serializer.JsonStringify(save, pretty: true);
1391
+ /// var roundtrip = Serializer.JsonDeserialize&lt;SaveData&gt;(json);
1392
+ /// </code>
1393
+ /// </example>
1394
+ public static string JsonStringify<T>(T input, bool pretty = false)
1395
+ {
1396
+ JsonSerializerOptions options = pretty
1397
+ ? SerializerEncoding.PrettyJsonOptions
1398
+ : SerializerEncoding.NormalJsonOptions;
1399
+
1400
+ return JsonStringify(input, options);
1401
+ }
1402
+
1403
+ /// <summary>
1404
+ /// Serializes an instance to a JSON string using the provided <paramref name="options"/>.
1405
+ /// </summary>
1406
+ /// <typeparam name="T">Instance type.</typeparam>
1407
+ /// <param name="input">The instance to serialize.</param>
1408
+ /// <param name="options">Serializer options.</param>
1409
+ /// <returns>JSON text.</returns>
1410
+ public static string JsonStringify<T>(T input, JsonSerializerOptions options)
1411
+ {
1412
+ if (options == null)
1413
+ {
1414
+ throw new ArgumentNullException(nameof(options));
1415
+ }
1416
+
1417
+ Type parameterType = typeof(T);
1418
+ if (
1419
+ parameterType.IsAbstract
1420
+ || parameterType.IsInterface
1421
+ || parameterType == typeof(object)
1422
+ )
1423
+ {
1424
+ object data = input;
1425
+ if (data == null)
1426
+ {
1427
+ return "{}";
1428
+ }
1429
+
1430
+ Type type = data.GetType();
1431
+ return JsonSerializer.Serialize(data, type, options);
1432
+ }
1433
+
1434
+ return JsonSerializer.Serialize(input, options);
1435
+ }
1436
+
1437
+ /// <summary>
1438
+ /// Reads JSON text from a file (UTF‑8) and deserializes to <typeparamref name="T"/>.
1439
+ /// </summary>
1440
+ /// <typeparam name="T">Target type.</typeparam>
1441
+ /// <param name="path">File path.</param>
1442
+ /// <returns>Decoded instance.</returns>
1443
+ public static T ReadFromJsonFile<T>(string path)
1444
+ {
1445
+ byte[] settingsAsBytes = File.ReadAllBytes(path);
1446
+ return JsonDeserialize<T>(settingsAsBytes);
1447
+ }
1448
+
1449
+ private static void WriteJsonToBuffer<T>(
1450
+ T input,
1451
+ JsonSerializerOptions options,
1452
+ PooledArrayBufferWriter buffer
1453
+ )
1454
+ {
1455
+ if (options == null)
1456
+ {
1457
+ throw new ArgumentNullException(nameof(options));
1458
+ }
1459
+ if (buffer == null)
1460
+ {
1461
+ throw new ArgumentNullException(nameof(buffer));
1462
+ }
1463
+
1464
+ using (
1465
+ Utf8JsonWriter writer = new(buffer, new JsonWriterOptions { SkipValidation = true })
1466
+ )
1467
+ {
1468
+ Type parameterType = typeof(T);
1469
+ if (
1470
+ parameterType.IsAbstract
1471
+ || parameterType.IsInterface
1472
+ || parameterType == typeof(object)
1473
+ )
1474
+ {
1475
+ object data = input;
1476
+ if (data == null)
1477
+ {
1478
+ writer.WriteStartObject();
1479
+ writer.WriteEndObject();
1480
+ writer.Flush();
1481
+ return;
1482
+ }
1483
+
1484
+ Type type = data.GetType();
1485
+ JsonSerializer.Serialize(writer, data, type, options);
1486
+ }
1487
+ else
1488
+ {
1489
+ JsonSerializer.Serialize(writer, input, options);
1490
+ }
1491
+ writer.Flush();
1492
+ }
1493
+ }
1494
+
1495
+ /// <summary>
1496
+ /// Asynchronously reads JSON text from a file (UTF‑8) and deserializes to <typeparamref name="T"/>.
1497
+ /// </summary>
1498
+ /// <typeparam name="T">Target type.</typeparam>
1499
+ /// <param name="path">File path.</param>
1500
+ /// <returns>Decoded instance.</returns>
1501
+ public static async Task<T> ReadFromJsonFileAsync<T>(string path)
1502
+ {
1503
+ byte[] settingsAsBytes = await File.ReadAllBytesAsync(path);
1504
+ return JsonDeserialize<T>(settingsAsBytes);
1505
+ }
1506
+
1507
+ /// <summary>
1508
+ /// Asynchronously reads JSON with cancellation.
1509
+ /// </summary>
1510
+ public static async Task<T> ReadFromJsonFileAsync<T>(
1511
+ string path,
1512
+ System.Threading.CancellationToken cancellationToken
1513
+ )
1514
+ {
1515
+ using FileStream fs = new(
1516
+ path,
1517
+ FileMode.Open,
1518
+ FileAccess.Read,
1519
+ FileShare.Read,
1520
+ 4096,
1521
+ useAsync: true
1522
+ );
1523
+ using Utils.PooledResource<PooledBufferStream> lease = PooledBufferStream.Rent(
1524
+ out PooledBufferStream stream
1525
+ );
1526
+ byte[] buffer = new byte[8192];
1527
+ int read;
1528
+ while ((read = await fs.ReadAsync(buffer, 0, buffer.Length, cancellationToken)) > 0)
1529
+ {
1530
+ stream.Write(buffer, 0, read);
1531
+ }
1532
+ ArraySegment<byte> seg = stream.GetWrittenSegment();
1533
+ return JsonDeserialize<T>(seg.Array.AsSpan(0, seg.Count).ToArray());
1534
+ }
1535
+
1536
+ /// <summary>
1537
+ /// Writes an instance to a JSON file (UTF‑8).
1538
+ /// </summary>
1539
+ /// <typeparam name="T">Instance type.</typeparam>
1540
+ /// <param name="input">The instance to serialize.</param>
1541
+ /// <param name="path">Destination file path.</param>
1542
+ /// <param name="pretty">Write indented output when true.</param>
1543
+ public static void WriteToJsonFile<T>(T input, string path, bool pretty = true)
1544
+ {
1545
+ string jsonAsText = JsonStringify(input, pretty);
1546
+ File.WriteAllText(path, jsonAsText);
1547
+ }
1548
+
1549
+ /// <summary>
1550
+ /// Asynchronously writes an instance to a JSON file (UTF‑8).
1551
+ /// </summary>
1552
+ /// <typeparam name="T">Instance type.</typeparam>
1553
+ /// <param name="input">The instance to serialize.</param>
1554
+ /// <param name="path">Destination file path.</param>
1555
+ /// <param name="pretty">Write indented output when true.</param>
1556
+ public static async Task WriteToJsonFileAsync<T>(T input, string path, bool pretty = true)
1557
+ {
1558
+ string jsonAsText = JsonStringify(input, pretty);
1559
+ await File.WriteAllTextAsync(path, jsonAsText);
1560
+ }
1561
+
1562
+ /// <summary>
1563
+ /// Asynchronously writes an instance to a JSON file (UTF‑8) with cancellation.
1564
+ /// </summary>
1565
+ public static async Task WriteToJsonFileAsync<T>(
1566
+ T input,
1567
+ string path,
1568
+ bool pretty,
1569
+ System.Threading.CancellationToken cancellationToken
1570
+ )
1571
+ {
1572
+ string jsonAsText = JsonStringify(input, pretty);
1573
+ byte[] bytes = SerializerEncoding.Encoding.GetBytes(jsonAsText);
1574
+ using FileStream fs = new(
1575
+ path,
1576
+ FileMode.Create,
1577
+ FileAccess.Write,
1578
+ FileShare.None,
1579
+ 4096,
1580
+ useAsync: true
1581
+ );
1582
+ await fs.WriteAsync(bytes, 0, bytes.Length, cancellationToken);
1583
+ }
1584
+
1585
+ /// <summary>
1586
+ /// Writes an instance to a JSON file (UTF‑8) using the provided <paramref name="options"/>.
1587
+ /// </summary>
1588
+ /// <typeparam name="T">Instance type.</typeparam>
1589
+ /// <param name="input">The instance to serialize.</param>
1590
+ /// <param name="path">Destination file path.</param>
1591
+ /// <param name="options">Serializer options.</param>
1592
+ public static void WriteToJsonFile<T>(T input, string path, JsonSerializerOptions options)
1593
+ {
1594
+ string jsonAsText = JsonStringify(input, options);
1595
+ File.WriteAllText(path, jsonAsText);
1596
+ }
1597
+
1598
+ /// <summary>
1599
+ /// Asynchronously writes an instance to a JSON file (UTF‑8) using the provided <paramref name="options"/>.
1600
+ /// </summary>
1601
+ /// <typeparam name="T">Instance type.</typeparam>
1602
+ /// <param name="input">The instance to serialize.</param>
1603
+ /// <param name="path">Destination file path.</param>
1604
+ /// <param name="options">Serializer options.</param>
1605
+ public static async Task WriteToJsonFileAsync<T>(
1606
+ T input,
1607
+ string path,
1608
+ JsonSerializerOptions options
1609
+ )
1610
+ {
1611
+ string jsonAsText = JsonStringify(input, options);
1612
+ await File.WriteAllTextAsync(path, jsonAsText);
1613
+ }
1614
+
1615
+ /// <summary>
1616
+ /// Attempts to read JSON into an instance, returns false if file missing or invalid.
1617
+ /// </summary>
1618
+ public static bool TryReadFromJsonFile<T>(string path, out T value)
1619
+ {
1620
+ try
1621
+ {
1622
+ if (!File.Exists(path))
1623
+ {
1624
+ value = default;
1625
+ return false;
1626
+ }
1627
+ string json = File.ReadAllText(path);
1628
+ value = JsonDeserialize<T>(json);
1629
+ return true;
1630
+ }
1631
+ catch
1632
+ {
1633
+ value = default;
1634
+ return false;
1635
+ }
1636
+ }
1637
+
1638
+ /// <summary>
1639
+ /// Attempts to write JSON to a file, returns false on failure.
1640
+ /// </summary>
1641
+ public static bool TryWriteToJsonFile<T>(T input, string path, bool pretty = true)
1642
+ {
1643
+ try
1644
+ {
1645
+ WriteToJsonFile(input, path, pretty);
1646
+ return true;
1647
+ }
1648
+ catch
1649
+ {
1650
+ return false;
1651
+ }
1652
+ }
1653
+ }
1654
+
1655
+ // Internal pooled, growable write stream backed by ArrayPool<byte> to reduce allocations
1656
+ internal sealed class PooledBufferStream : Stream
1657
+ {
1658
+ private const int DefaultInitialCapacity = 256;
1659
+
1660
+ private byte[] _buffer;
1661
+ private int _length;
1662
+ private int _position;
1663
+ private bool _disposed;
1664
+
1665
+ private static readonly Utils.WallstopGenericPool<PooledBufferStream> Pool = new(
1666
+ producer: () => new PooledBufferStream(),
1667
+ onRelease: stream => stream.ResetForReuse(),
1668
+ onDisposal: stream => stream.Dispose()
1669
+ );
1670
+
1671
+ public static Utils.PooledResource<PooledBufferStream> Rent(
1672
+ out PooledBufferStream stream
1673
+ ) => Pool.Get(out stream);
1674
+
1675
+ private PooledBufferStream(int initialCapacity = DefaultInitialCapacity)
1676
+ {
1677
+ if (initialCapacity < 1)
1678
+ {
1679
+ initialCapacity = DefaultInitialCapacity;
1680
+ }
1681
+
1682
+ _buffer = ArrayPool<byte>.Shared.Rent(initialCapacity);
1683
+ _length = 0;
1684
+ _position = 0;
1685
+ }
1686
+
1687
+ internal ArraySegment<byte> GetWrittenSegment()
1688
+ {
1689
+ return new ArraySegment<byte>(_buffer, 0, _length);
1690
+ }
1691
+
1692
+ private void ResetForReuse()
1693
+ {
1694
+ _length = 0;
1695
+ _position = 0;
1696
+ _disposed = false;
1697
+ }
1698
+
1699
+ public override bool CanRead => false;
1700
+ public override bool CanSeek => true;
1701
+ public override bool CanWrite => true;
1702
+ public override long Length => _length;
1703
+
1704
+ public override long Position
1705
+ {
1706
+ get => _position;
1707
+ set => Seek(value, SeekOrigin.Begin);
1708
+ }
1709
+
1710
+ public override void Flush() { }
1711
+
1712
+ public override int Read(byte[] buffer, int offset, int count)
1713
+ {
1714
+ throw new NotSupportedException();
1715
+ }
1716
+
1717
+ public override long Seek(long offset, SeekOrigin origin)
1718
+ {
1719
+ int basePos = origin switch
1720
+ {
1721
+ SeekOrigin.Begin => 0,
1722
+ SeekOrigin.Current => _position,
1723
+ SeekOrigin.End => _length,
1724
+ _ => 0,
1725
+ };
1726
+ long newPos = basePos + offset;
1727
+ if (newPos is < 0 or > int.MaxValue)
1728
+ {
1729
+ throw new ArgumentOutOfRangeException(nameof(offset));
1730
+ }
1731
+ _position = (int)newPos;
1732
+ return _position;
1733
+ }
1734
+
1735
+ public override void SetLength(long value)
1736
+ {
1737
+ if (value is < 0 or > int.MaxValue)
1738
+ {
1739
+ throw new ArgumentOutOfRangeException(nameof(value));
1740
+ }
1741
+ int newLen = (int)value;
1742
+ EnsureCapacity(newLen);
1743
+ _length = newLen;
1744
+ if (_position > _length)
1745
+ {
1746
+ _position = _length;
1747
+ }
1748
+ }
1749
+
1750
+ public override void Write(byte[] buffer, int offset, int count)
1751
+ {
1752
+ int endPos = _position + count;
1753
+ EnsureCapacity(endPos);
1754
+ Array.Copy(buffer, offset, _buffer, _position, count);
1755
+ _position = endPos;
1756
+ if (endPos > _length)
1757
+ {
1758
+ _length = endPos;
1759
+ }
1760
+ }
1761
+
1762
+ public override void WriteByte(byte value)
1763
+ {
1764
+ int endPos = _position + 1;
1765
+ EnsureCapacity(endPos);
1766
+ _buffer[_position] = value;
1767
+ _position = endPos;
1768
+ if (endPos > _length)
1769
+ {
1770
+ _length = endPos;
1771
+ }
1772
+ }
1773
+
1774
+ private void EnsureCapacity(int required)
1775
+ {
1776
+ if (_buffer.Length >= required)
1777
+ {
1778
+ return;
1779
+ }
1780
+
1781
+ int newSize = _buffer.Length;
1782
+ if (newSize < DefaultInitialCapacity)
1783
+ {
1784
+ newSize = DefaultInitialCapacity;
1785
+ }
1786
+
1787
+ while (newSize < required)
1788
+ {
1789
+ newSize = newSize < 1024 ? newSize * 2 : newSize + (newSize >> 1);
1790
+ }
1791
+ byte[] newBuf = ArrayPool<byte>.Shared.Rent(newSize);
1792
+ if (_length > 0)
1793
+ {
1794
+ Array.Copy(_buffer, newBuf, _length);
1795
+ }
1796
+ ArrayPool<byte>.Shared.Return(_buffer);
1797
+ _buffer = newBuf;
1798
+ }
1799
+
1800
+ protected override void Dispose(bool disposing)
1801
+ {
1802
+ if (!_disposed)
1803
+ {
1804
+ if (_buffer != null)
1805
+ {
1806
+ ArrayPool<byte>.Shared.Return(_buffer);
1807
+ _buffer = Array.Empty<byte>();
1808
+ }
1809
+ _length = 0;
1810
+ _position = 0;
1811
+ _disposed = true;
1812
+ }
1813
+ base.Dispose(disposing);
1814
+ }
1815
+
1816
+ public int ToArrayExact(ref byte[] buffer)
1817
+ {
1818
+ if (buffer == null || buffer.Length < _length)
1819
+ {
1820
+ buffer = new byte[_length];
1821
+ }
1822
+
1823
+ if (_length > 0)
1824
+ {
1825
+ Array.Copy(_buffer, buffer, _length);
1826
+ }
1827
+
1828
+ return _length;
1829
+ }
1830
+
1831
+ public override void Write(ReadOnlySpan<byte> buffer)
1832
+ {
1833
+ int count = buffer.Length;
1834
+ int endPos = _position + count;
1835
+ EnsureCapacity(endPos);
1836
+ buffer.CopyTo(new Span<byte>(_buffer, _position, count));
1837
+ _position = endPos;
1838
+ if (endPos > _length)
1839
+ {
1840
+ _length = endPos;
1841
+ }
1842
+ }
1843
+
1844
+ public override ValueTask WriteAsync(
1845
+ ReadOnlyMemory<byte> source,
1846
+ System.Threading.CancellationToken cancellationToken = default
1847
+ )
1848
+ {
1849
+ // Delegate to synchronous span-based path; callers expect a fast in-memory stream
1850
+ Write(source.Span);
1851
+ return new ValueTask();
1852
+ }
1853
+ }
1854
+
1855
+ // Internal pooled ArrayBufferWriter-like implementation to enable zero-copy JSON writing via IBufferWriter<byte>
1856
+ internal sealed class PooledArrayBufferWriter : IBufferWriter<byte>, IDisposable
1857
+ {
1858
+ private const int DefaultInitialCapacity = 256;
1859
+ private byte[] _buffer;
1860
+ private int _written;
1861
+ private bool _disposed;
1862
+
1863
+ private static readonly Utils.WallstopGenericPool<PooledArrayBufferWriter> Pool = new(
1864
+ producer: () => new PooledArrayBufferWriter(),
1865
+ onRelease: w =>
1866
+ {
1867
+ w.Reset();
1868
+ }
1869
+ );
1870
+
1871
+ public static Utils.PooledResource<PooledArrayBufferWriter> Rent(
1872
+ out PooledArrayBufferWriter writer
1873
+ ) => Pool.Get(out writer);
1874
+
1875
+ private PooledArrayBufferWriter(int initialCapacity = DefaultInitialCapacity)
1876
+ {
1877
+ _buffer = ArrayPool<byte>.Shared.Rent(initialCapacity);
1878
+ _written = 0;
1879
+ }
1880
+
1881
+ private void EnsureCapacity(int sizeHint)
1882
+ {
1883
+ if (sizeHint <= 0)
1884
+ {
1885
+ sizeHint = 1;
1886
+ }
1887
+ int required = _written + sizeHint;
1888
+ if (_buffer.Length >= required)
1889
+ {
1890
+ return;
1891
+ }
1892
+
1893
+ int newSize = _buffer.Length;
1894
+ while (newSize < required)
1895
+ {
1896
+ newSize = newSize < 1024 ? newSize * 2 : newSize + (newSize >> 1);
1897
+ }
1898
+
1899
+ byte[] newBuf = ArrayPool<byte>.Shared.Rent(newSize);
1900
+ if (_written > 0)
1901
+ {
1902
+ Buffer.BlockCopy(_buffer, 0, newBuf, 0, _written);
1903
+ }
1904
+ ArrayPool<byte>.Shared.Return(_buffer);
1905
+ _buffer = newBuf;
1906
+ }
1907
+
1908
+ public void Advance(int count)
1909
+ {
1910
+ _written += count;
1911
+ }
1912
+
1913
+ public Memory<byte> GetMemory(int sizeHint = 0)
1914
+ {
1915
+ EnsureCapacity(sizeHint);
1916
+ return _buffer.AsMemory(_written);
1917
+ }
1918
+
1919
+ public Span<byte> GetSpan(int sizeHint = 0)
1920
+ {
1921
+ EnsureCapacity(sizeHint);
1922
+ return _buffer.AsSpan(_written);
1923
+ }
1924
+
1925
+ public int WrittenCount => _written;
1926
+
1927
+ public void Preallocate(int sizeHint)
1928
+ {
1929
+ EnsureCapacity(sizeHint);
1930
+ }
1931
+
1932
+ public int ToArrayExact(ref byte[] buffer)
1933
+ {
1934
+ if (buffer == null || buffer.Length < _written)
1935
+ {
1936
+ buffer = new byte[_written];
1937
+ }
1938
+ if (_written > 0)
1939
+ {
1940
+ Buffer.BlockCopy(_buffer, 0, buffer, 0, _written);
1941
+ }
1942
+ return _written;
1943
+ }
1944
+
1945
+ private void Reset()
1946
+ {
1947
+ // Keep the rented buffer to avoid churn; just reset write cursor.
1948
+ if (_buffer == null || _buffer.Length == 0)
1949
+ {
1950
+ _buffer = ArrayPool<byte>.Shared.Rent(DefaultInitialCapacity);
1951
+ }
1952
+ _written = 0;
1953
+ _disposed = false;
1954
+ }
1955
+
1956
+ public void Dispose()
1957
+ {
1958
+ if (!_disposed)
1959
+ {
1960
+ if (_buffer != null)
1961
+ {
1962
+ ArrayPool<byte>.Shared.Return(_buffer);
1963
+ }
1964
+ _buffer = Array.Empty<byte>();
1965
+ _written = 0;
1966
+ _disposed = true;
1967
+ }
1968
+ }
1969
+ }
1970
+
1971
+ // Internal pooled read-only stream over an existing byte[] to avoid MemoryStream allocation in deserialization paths
1972
+ internal sealed class PooledReadOnlyMemoryStream : Stream
1973
+ {
1974
+ private byte[] _buffer = Array.Empty<byte>();
1975
+ private int _position;
1976
+ private int _length;
1977
+
1978
+ private static readonly Utils.WallstopGenericPool<PooledReadOnlyMemoryStream> Pool = new(
1979
+ producer: () => new PooledReadOnlyMemoryStream(),
1980
+ onRelease: s =>
1981
+ {
1982
+ s.ResetForReuse();
1983
+ }
1984
+ );
1985
+
1986
+ public static Utils.PooledResource<PooledReadOnlyMemoryStream> Rent(
1987
+ out PooledReadOnlyMemoryStream stream
1988
+ ) => Pool.Get(out stream);
1989
+
1990
+ public void SetBuffer(byte[] buffer)
1991
+ {
1992
+ _buffer = buffer ?? Array.Empty<byte>();
1993
+ _position = 0;
1994
+ _length = _buffer.Length;
1995
+ }
1996
+
1997
+ private void ResetForReuse()
1998
+ {
1999
+ SetBuffer(Array.Empty<byte>());
2000
+ }
2001
+
2002
+ public override bool CanRead => true;
2003
+ public override bool CanSeek => true;
2004
+ public override bool CanWrite => false;
2005
+ public override long Length => _length;
2006
+
2007
+ public override long Position
2008
+ {
2009
+ get => _position;
2010
+ set
2011
+ {
2012
+ if (value is < 0 or > int.MaxValue)
2013
+ {
2014
+ throw new ArgumentOutOfRangeException(nameof(value));
2015
+ }
2016
+ _position = (int)value;
2017
+ }
2018
+ }
2019
+
2020
+ public override void Flush() { }
2021
+
2022
+ public override int Read(byte[] buffer, int offset, int count)
2023
+ {
2024
+ if (buffer == null)
2025
+ {
2026
+ throw new ArgumentNullException(nameof(buffer));
2027
+ }
2028
+
2029
+ if ((uint)offset > buffer.Length || (uint)count > buffer.Length - offset)
2030
+ {
2031
+ throw new ArgumentOutOfRangeException();
2032
+ }
2033
+ int remaining = _length - _position;
2034
+ if (remaining <= 0)
2035
+ {
2036
+ return 0;
2037
+ }
2038
+ if (count > remaining)
2039
+ {
2040
+ count = remaining;
2041
+ }
2042
+
2043
+ Array.Copy(_buffer, _position, buffer, offset, count);
2044
+ _position += count;
2045
+ return count;
2046
+ }
2047
+
2048
+ // Span-based fast-path used by modern callers (e.g., protobuf-net)
2049
+ public override int Read(Span<byte> destination)
2050
+ {
2051
+ int remaining = _length - _position;
2052
+ if (remaining <= 0)
2053
+ {
2054
+ return 0;
2055
+ }
2056
+
2057
+ int toCopy = destination.Length;
2058
+ if (toCopy > remaining)
2059
+ {
2060
+ toCopy = remaining;
2061
+ }
2062
+
2063
+ new ReadOnlySpan<byte>(_buffer, _position, toCopy).CopyTo(destination);
2064
+ _position += toCopy;
2065
+ return toCopy;
2066
+ }
2067
+
2068
+ public override ValueTask<int> ReadAsync(
2069
+ Memory<byte> destination,
2070
+ System.Threading.CancellationToken cancellationToken = default
2071
+ )
2072
+ {
2073
+ // Delegate to synchronous span-based path; this stream is purely in-memory
2074
+ int read = Read(destination.Span);
2075
+ return new ValueTask<int>(read);
2076
+ }
2077
+
2078
+ public override int ReadByte()
2079
+ {
2080
+ if (_position >= _length)
2081
+ {
2082
+ return -1;
2083
+ }
2084
+
2085
+ return _buffer[_position++];
2086
+ }
2087
+
2088
+ public override long Seek(long offset, SeekOrigin origin)
2089
+ {
2090
+ int basePos = origin switch
2091
+ {
2092
+ SeekOrigin.Begin => 0,
2093
+ SeekOrigin.Current => _position,
2094
+ SeekOrigin.End => _length,
2095
+ _ => 0,
2096
+ };
2097
+ long newPos = basePos + offset;
2098
+ if (newPos is < 0 or > int.MaxValue)
2099
+ {
2100
+ throw new IOException("Attempted to seek outside the stream bounds.");
2101
+ }
2102
+ _position = (int)newPos;
2103
+ return _position;
2104
+ }
2105
+
2106
+ public override void SetLength(long value)
2107
+ {
2108
+ throw new NotSupportedException();
2109
+ }
2110
+
2111
+ public override void Write(byte[] buffer, int offset, int count)
2112
+ {
2113
+ throw new NotSupportedException();
2114
+ }
2115
+
2116
+ public override void WriteByte(byte value)
2117
+ {
2118
+ throw new NotSupportedException();
2119
+ }
2120
+ }
2121
+ }