
Company News
Jerod Santo Joins Socket as Head of Media
Allow myself to introduce... myself.
@memberjunction/record-comparison
Advanced tools
MemberJunction: Framework-agnostic record comparison engine — loads a set of records for one entity and computes a structured field-level delta. Shared by the duplicate-detection reasoning path and the UI side-by-side comparison panel.
Framework-agnostic record comparison primitive for MemberJunction.
RecordComparisonEngine loads a set of records for a single entity and computes a
structured, field-level delta between them — a survivor candidate plus its potential
matches diffed column-by-column. It performs a read-only load (RunView with
ResultType: 'simple' and a targeted field list) and never mutates records.
The comparison logic is needed by two callers that sit on opposite sides of the dependency graph:
@memberjunction/ai-vector-dupe),
which feeds the differing-field deltas to the reasoning provider as context.@memberjunction/core-entities-server → MJServer resolver → GraphQL client →
Angular record-merge).@memberjunction/core-entities-server depends on @memberjunction/ai-vector-dupe, so
the dupe package sits lower in the graph and cannot reach an engine that lives in the
server package without creating a build cycle. Hoisting the engine into this low-level
package (its only dependency is @memberjunction/core) gives both sides a single
implementation with no cycle and no duplicated delta logic.
import { RecordComparisonEngine } from '@memberjunction/record-comparison';
import { CompositeKey } from '@memberjunction/core';
const engine = new RecordComparisonEngine();
// By entity name (resolver / UI path) — resolves the entity from metadata.
const result = await engine.CompareRecords(
{ EntityName: 'Accounts', Keys: [survivorKey, candidateKey] },
contextUser,
provider // request-scoped IMetadataProvider (multi-provider safety)
);
// With an already-resolved EntityInfo + an injected RunView (dupe path) — skips the
// by-name lookup and reuses the caller's request-scoped RunView.
const result2 = await engine.CompareRecordsForEntity(
entityInfo,
[sourceKey, ...candidateKeys],
contextUser,
{ runView }
);
result.Fields is a plain-data delta matrix (no BaseEntity instances), so it
serializes cleanly across GraphQL and into a reasoning prompt.
FAQs
MemberJunction: Framework-agnostic record comparison engine — loads a set of records for one entity and computes a structured field-level delta. Shared by the duplicate-detection reasoning path and the UI side-by-side comparison panel.
The npm package @memberjunction/record-comparison receives a total of 716 weekly downloads. As such, @memberjunction/record-comparison popularity was classified as not popular.
We found that @memberjunction/record-comparison demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 11 open source maintainers collaborating on the project.

Company News
Allow myself to introduce... myself.

Research
/Security News
A Twitch browser extension on Chrome and Firefox forwards users’ live OAuth session tokens through proxies controlled by a Russian bot service.

Security News
Anthropic found biased reasoning and recklessness drove Claude Mythos 5 to publish malware on PyPI and compromise a security vendor.