* Add delta workflow helpers and comparison serialization (v5.0.0-alpha.2)
Port workflow helpers from json-delta-py PR #2, adapted to TypeScript
functional style:
- squashDeltas: compact multiple deltas into net-effect delta
- deltaMap / deltaStamp / deltaGroupBy: immutable delta transformations
- operationSpecDict / operationExtensions: spec vs extension key partitioning
- deltaSpecDict / deltaExtensions: same for delta envelopes
- leafProperty: terminal property name from operation path
- comparisonToDict: recursive comparison tree serialization
- comparisonToFlatList: flatten comparison to leaf changes with paths
* Address Copilot review: verifyTarget, undefined guards, IDENT_RE, test name
- Use diffDelta instead of JSON.stringify for target verification
(handles key ordering differences correctly)
- Guard against undefined children in comparisonToDict and flattenNode
(enrich() returns undefined for Function values)
- Fix IDENT_RE to match spec's SIMPLE_PROPERTY_RE (no $ in identifiers)
- Rename misleading test name to 'omits absent keys from result'
* Fix SonarCloud reliability issues: wrap .map callback, add localeCompare
* Fix array index preservation and prototype pollution in helpers
- comparisonToDict: preserve array indices with null placeholders instead
of filtering (which collapsed indices)
- operationExtensions/deltaExtensions/deltaGroupBy: use Object.create(null)
to prevent prototype pollution from untrusted keys
* Use Object.create(null) for remaining arbitrary-key accumulators
* Use Object.defineProperty for squashDeltas envelope extension merging
* Fix comparisonToDict docstring: plain JS object, not JSON object