lib/record-patch-builder.js
function addInvolvedObjectProperty(
	objectPropDesc, involvedPropPaths, updatedPropPaths) {

	if (updatedPropPaths)
		updatedPropPaths.add(
			objectPropDesc.container.nestedPath + objectPropDesc.name);

	const container = objectPropDesc.nestedProperties;
	for (let propName of container.allPropertyNames) {
		const propDesc = container.getPropertyDesc(propName);
		if (propDesc.isCalculated() || propDesc.isView())
			continue;
		if (propDesc.scalarValueType === 'object') {
			addInvolvedObjectProperty(
				objectPropDesc, involvedPropPaths, updatedPropPaths);
		} else {
			const propPath = container.nestedPath + propName;
			involvedPropPaths.add(propPath);
			if (updatedPropPaths)
				updatedPropPaths.add(propPath);
		}
	}
}
function addInvolvedObjectProperty(
	objectPropDesc, involvedPropPaths, updatedPropPaths) {

	if (updatedPropPaths)
		updatedPropPaths.add(
			objectPropDesc.container.nestedPath + objectPropDesc.name);

	const container = objectPropDesc.nestedProperties;
	for (let propName of container.allPropertyNames) {
		const propDesc = container.getPropertyDesc(propName);
		if (propDesc.isCalculated() || propDesc.isView())
			continue;
		if (propDesc.scalarValueType === 'object') {
			addInvolvedObjectProperty(
				objectPropDesc, involvedPropPaths, updatedPropPaths);
		} else {
			const propPath = container.nestedPath + propName;
			involvedPropPaths.add(propPath);
			if (updatedPropPaths)
				updatedPropPaths.add(propPath);
		}
	}
}
function addInvolvedObjectProperty ( objectPropDesc , involvedPropPaths , updatedPropPaths ) { if ( updatedPropPaths ) updatedPropPaths . add ( objectPropDesc . container . nestedPath + objectPropDesc . name ) ; const container = objectPropDesc . nestedProperties ; for ( let propName of container . allPropertyNames ) { const propDesc = container . getPropertyDesc ( propName ) ; if ( propDesc . isCalculated ( ) || propDesc . isView ( ) ) continue ; if ( propDesc . scalarValueType === 'object' ) { addInvolvedObjectProperty ( objectPropDesc , involvedPropPaths , updatedPropPaths ) ; } else { const propPath = container . nestedPath + propName ; involvedPropPaths . add ( propPath ) ; if ( updatedPropPaths ) updatedPropPaths . add ( propPath ) ; } } }
Recursively add nested object property to the involved property paths
collection.

@private
@param {module:x2node-records~PropertyDescriptor} objectPropDesc Nested object
property descriptor.
@param {Set.<string>} involvedPropPaths Involved property paths collection.
@param {Set.<string>} [updatedPropPaths] Updated property paths collection if
the involved property is to be updated by the patch.
Recursively add nested object property to the involved property paths collection .