Skip to content

v5.0.0-alpha.2

@ltwlf ltwlf tagged this 11 Mar 20:21
* 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
Assets 2
Loading