Skip to content

Conversation

@nev21
Copy link
Contributor

@nev21 nev21 commented Jan 24, 2026

Add deep equality key comparison for object keys in Maps, Sets, and plain objects. Supports passing keys as Arrays, Sets, Maps, or other iterables.

Key Changes:

  • Implement anyDeepKeysFunc and allDeepKeysFunc with deep equality comparison
  • Add six assert methods: hasAnyDeepKeys, hasAllDeepKeys, and their negations (notHaveAnyDeepKeys, doesNotHaveAnyDeepKeys, notHaveAllDeepKeys, doesNotHaveAllDeepKeys)
  • Update IAssertClass signatures from varargs (...keys) to fixed arguments (keys, initMsg?) to support optional custom error messages
  • Add ArrayLikeOrSizedIterable support: keys parameter accepts Arrays, Sets, Maps, or any iterable collection
  • Implement _isMsgSource logic in _getArgKeysForDeep to properly handle optional initMsg parameter
  • Wire deep keys through IAllOp, IAnyOp, and IDeepOp interfaces

Documentation:

  • Update @param descriptions to mention Sets, Maps, and iterables
  • Change examples from varargs syntax to array syntax
  • Add deep keys to README and Chai compatibility documentation

Addresses Chai v5.x compatibility for deep keys operations.

…pport

Add deep equality key comparison for object keys in Maps, Sets, and plain
objects. Supports passing keys as Arrays, Sets, Maps, or other iterables.

**Key Changes:**
- Implement anyDeepKeysFunc and allDeepKeysFunc with deep equality comparison
- Add six assert methods: hasAnyDeepKeys, hasAllDeepKeys, and their negations
  (notHaveAnyDeepKeys, doesNotHaveAnyDeepKeys, notHaveAllDeepKeys,
  doesNotHaveAllDeepKeys)
- Update IAssertClass signatures from varargs (...keys) to fixed arguments
  (keys, initMsg?) to support optional custom error messages
- Add ArrayLikeOrSizedIterable support: keys parameter accepts Arrays, Sets,
  Maps, or any iterable collection
- Implement _isMsgSource logic in _getArgKeysForDeep to properly handle
  optional initMsg parameter
- Wire deep keys through IAllOp, IAnyOp, and IDeepOp interfaces

**Documentation:**
- Update @param descriptions to mention Sets, Maps, and iterables
- Change examples from varargs syntax to array syntax
- Add deep keys to README and Chai compatibility documentation

Addresses Chai v5.x compatibility for deep keys operations.
@nev21 nev21 added this to the 0.1.5 milestone Jan 24, 2026
Copilot AI review requested due to automatic review settings January 24, 2026 07:34
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR implements deep key assertions for Maps, Sets, and objects using deep equality comparison instead of strict reference equality. This addresses Chai v5.x compatibility requirements for deep key operations.

Changes:

  • Adds six new assertion methods (hasAnyDeepKeys, hasAllDeepKeys, notHaveAnyDeepKeys, doesNotHaveAnyDeepKeys, notHaveAllDeepKeys, doesNotHaveAllDeepKeys) with deep equality key matching
  • Implements ArrayLikeOrSizedIterable support for keys parameter, allowing Arrays, Sets, Maps, and other iterables
  • Integrates deep keys functionality through operation chains (has.any.deep.keys, has.all.deep.keys, etc.)

Reviewed changes

Copilot reviewed 15 out of 15 changed files in this pull request and generated no comments.

Show a summary per file
File Description
core/test/src/assert/assert.deepKeys.test.ts Comprehensive test suite for deep keys assertions with Maps, Sets, objects, and edge cases
shim/chai/test/src/chaiAssert.test.ts Uncommented and enabled deep keys tests for Chai compatibility verification
shim/chai/src/assert/chaiAssert.ts Added Chai-specific deep keys methods mapping to expression adapters
shim/chai/README.md Documented new deep keys support for Maps/Sets with object keys
core/src/assert/ops/keysOp.ts Implemented anyDeepKeyFilterOp, allDeepKeyFilterOp, and deepKeysOp operations
core/src/assert/ops/deepOp.ts Integrated deep keys operation into IDeepOp interface
core/src/assert/ops/allOp.ts Added deep property to IAnyOp and IAllOp for deep key filtering
core/src/assert/interface/ops/IDeepOp.ts Added keys property for deep equality key operations
core/src/assert/interface/ops/IAnyOp.ts Added deep property returning IKeysOp for any.deep.keys chains
core/src/assert/interface/ops/IAllOp.ts Added deep property returning IKeysOp for all.deep.keys chains
core/src/assert/interface/IAssertClass.ts Added type definitions and JSDoc for six new deep keys assertion methods
core/src/assert/funcs/keysFunc.ts Implemented anyDeepKeysFunc and allDeepKeysFunc with deep equality comparison logic
core/src/assert/assertClass.ts Registered deep keys assertion functions with expression adapters
core/README.md Updated features list to mention deep keys support
.github/copilot-instructions.md Added versioning guidelines for @SInCE tags on new features

@nev21 nev21 changed the title feat: implement deep keys assertions with ArrayLikeOrSizedIterable su… feat: implement deep keys assertions with ArrayLikeOrSizedIterable support Jan 24, 2026
@nev21 nev21 enabled auto-merge (squash) January 24, 2026 07:44
@nev21 nev21 merged commit 8bc4af8 into main Jan 24, 2026
16 checks passed
@nev21 nev21 deleted the nev21/deepKeys branch January 24, 2026 07:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants