File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -154,13 +154,13 @@ export class ChangeSet<T extends StringIndexedObject> {
154154 ) : ParameterChange < T > [ ] {
155155 const parameterChangeSet = new Array < ParameterChange < T > > ( ) ;
156156
157- // Filter out null and undefined values or else the diff below will not work
157+ // Filter out null, undefined, [], and {} — all treated as "no value"
158158 const desired = Object . fromEntries (
159- Object . entries ( desiredParameters ) . filter ( ( [ , v ] ) => v !== null && v !== undefined )
159+ Object . entries ( desiredParameters ) . filter ( ( [ , v ] ) => ! ChangeSet . isAbsent ( v ) )
160160 ) as Partial < T >
161161
162162 const current = Object . fromEntries (
163- Object . entries ( currentParameters ) . filter ( ( [ , v ] ) => v !== null && v !== undefined )
163+ Object . entries ( currentParameters ) . filter ( ( [ , v ] ) => ! ChangeSet . isAbsent ( v ) )
164164 ) as Partial < T >
165165
166166 for ( const k of new Set ( [ ...Object . keys ( current ) , ...Object . keys ( desired ) ] ) ) {
@@ -227,6 +227,13 @@ export class ChangeSet<T extends StringIndexedObject> {
227227 return orderOfOperations [ Math . max ( indexPrev , indexNext ) ] ;
228228 }
229229
230+ private static isAbsent ( v : unknown ) : boolean {
231+ if ( v === null || v === undefined ) return true ;
232+ if ( Array . isArray ( v ) ) return v . length === 0 ;
233+ if ( typeof v === 'object' ) return Object . keys ( v as object ) . length === 0 ;
234+ return false ;
235+ }
236+
230237 private static isSame (
231238 desired : unknown ,
232239 current : unknown ,
You can’t perform that action at this time.
0 commit comments