docs: function diffMaps(propDesc, propPath, mapOld, mapNew, patchSpec) {
  
  	const objects = (propDesc.scalarValueType === 'object');
  
  	const keysToRemove = new Set(Object.keys(mapOld));
  	for (let key of Object.keys(mapNew)) {
  
  		const valOld = mapOld[key];
  		const valNew = mapNew[key];
  
  		if ((valNew === undefined) || (valNew === null)) {
  			if ((valOld === undefined) || (valOld === null))
  				keysToRemove.delete(key);
  			continue;
  		}
  
  		keysToRemove.delete(key);
  
  		if ((valOld === undefined) || (valOld === null)) {
  			patchSpec.push({
  				op: 'add',
  				path: `${propPath}/${ptrSafe(key)}`,
  				value: valNew
  			});
  		} else if (objects) {
  			diffObjects(
  				propDesc.nestedProperties,
  				`${propPath}/${ptrSafe(key)}/`,
  				valOld, valNew, patchSpec);
  		} else if (valNew !== valOld) {
  			patchSpec.push({
  				op: 'replace',
  				path: `${propPath}/${ptrSafe(key)}`,
  				value: valNew
  			});
  		}
  	}
  
  	for (let key of keysToRemove)
  		patchSpec.push({
  			op: 'remove',
  			path: `${propPath}/${ptrSafe(key)}`
  		});
  }